Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    vincolo interelazionale MYSQL

    Ciao, sto a usare MYSQL per esame di Basi di dati, devo fare tutto in modo a mano senza tool grafici.
    Non mi è chiaro perchè non mi funziona il vincolo INTERELAZIONALE.
    il codice:

    -- creazione db inizio-------------
    drop database prova;
    create database prova;
    use prova;
    -- creazione db fine-------------


    --- creazione tabelle INIZIO ---------------

    Create table dipartimento
    (
    NomeDip char(15) primary key,
    Sede char(20) not null
    );

    create table impiegato
    (
    matricola character(6) primary key,
    nome varchar(20) not null,
    cognome varchar(20) not null,
    dipart char(15),

    foreign key (dipart) references dipartimento(NomeDip) on delete cascade on update cascade,
    unique (cognome, nome)
    );

    --- creazione tabelle FINE ---------------

    -- inserimento -------------------
    insert into dipartimento (NomeDip,Sede) values ('Lab 1','roma');
    insert into dipartimento (NomeDip,Sede) values ('Lab 2','Milano');

    insert into impiegato (matricola,nome,cognome,dipart)values ('88','mario','rossi' ,'Lab 1');
    insert into impiegato (Matricola,Nome,Cognome,dipart)values ('80','luigi','bianco','Lab 2');

    ed ottengo:

    select * from dipartimento;
    +---------+--------+
    | NomeDip | Sede |
    +---------+--------+
    | Lab 1 | roma |
    | Lab 2 | Milano |
    +---------+--------+

    select * from impiegato;
    +-----------+-------+---------+--------+
    | matricola | nome | cognome | dipart |
    +-----------+-------+---------+--------+
    | 88 | mario | rossi | Lab 1 |
    | 80 | luigi | bianco | Lab 2 |
    +-----------+-------+---------+--------+

    faccio un aggiornamento:

    update dipartimento set NomeDip = 'xxx' where NomeDip='Lab 1';

    ottengo:
    select * from impiegato;
    +-----------+-------+---------+--------+
    | matricola | nome | cognome | dipart |
    +-----------+-------+---------+--------+
    | 88 | mario | rossi | Lab 1 |
    | 80 | luigi | bianco | Lab 2 |
    +-----------+-------+---------+--------+

    select * from dipartimento;
    +---------+--------+
    | NomeDip | Sede |
    +---------+--------+
    | xxx | roma |
    | Lab 2 | Milano |
    +---------+--------+


    DOMANDA: essendo un vincolo INTERELAZIONALE, facendo l'aggiornamento sulla tabella dipartimento non dovevo avere in automantico un aggiornamento del valore anche sull'altra tabella?

    Dove sbaglio? qualcuno può correggermi l'errore ?
    le ho provate tutte, di teoria non trovo + cose nuove.

  2. #2
    aiuti ?

  3. #3
    MI rispondo da solo
    Si deve mettere alla fine della definizione della tabella ENGINE = INNODB;
    Tutti professori su internet ma nessuno che fa un esempio completo.


    drop database prova;
    create database prova;
    use prova;

    Create table dipartimento
    (
    NomeDip char(15) primary key,
    Sede char(20) not null
    )ENGINE = INNODB;

    create table impiegato
    (
    matricola character(6) primary key,
    nome varchar(20) not null,
    cognome varchar(20) not null,
    dipart char(15),

    foreign key (dipart) references dipartimento(NomeDip) on delete cascade on update cascade,
    unique (cognome, nome)
    )ENGINE = INNODB;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.