Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537

    [Mysql] Vincoli di integrità referenziali non funzionano?

    Salve a tutti,
    sto implementando nelle tabelle dei vincoli di integrità referenziali ma in realtà mi sono accorto che non funzionano e non capisco il perchè.
    Per essere più chiaro posto il mio esempio:
    codice:
    CREATE TABLE utente (
      id int(11) NOT NULL AUTO_INCREMENT,
      nome varchar(100) NOT NULL,
      cognome varchar(100) NOT NULL,
      PRIMARY KEY (id)
    );
    
    CREATE TABLE messaggio (
      id int(11) NOT NULL AUTO_INCREMENT,
      titolo varchar(70) NOT NULL,
      testo text NOT NULL,
      PRIMARY KEY (id)
    );
    
    CREATE TABLE scrivimessaggio (
      id int(11) NOT NULL AUTO_INCREMENT,
      id_utente int(11) NOT NULL,
      id_msg int(11) NOT NULL,
      PRIMARY KEY (id),
    foreign key(id_utente) references utente(id) on delete cascade on update cascade,
    foreign key(id_msg) references messaggio(id) on delete cascade on update cascade
      );
    
    INSERT INTO utente(nome, cognome) VALUES('dfvsdfv','sdfvdfsv');
    INSERT INTO messaggio(titolo, testo) VALUES('dfvsdfvdsfv','sdfvsdfvsdfvdsfvdsfvsdfvdsfvdsfv');
    // Inserisco il valore 1,1 per comodità in realtà lo devo prelevare dalle rispettive tabelle
    INSERT INTO scrivimessaggio(id_utente, id_msg) VALUES(1,1);
    Ho queste 3 semplici tabelle, praticamente se non ho capito male applicando gli UPDATE e DELETE a cascata se faccio l'UPDATE dell'id nella tabella utente dovrebbe aggiornarsi anche l' id_utente nella tabella scrivimessaggio ma questo non accade.

    codice:
    UPDATE utente SET id = 2 WHERE id =1;
    ora la tabella scrivimessaggio contiene ancora
    codice:
    id	id_utente	id_msg
    1	1	1
    ma non dovrebbe contenere QUESTO????
    codice:
    id	id_utente	id_msg
    1	2	1

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se in fase di creazione tabella non espliciti l'engine, viene utilizzato quello di default, ricavabile tramite

    show engines;

    che sicuramente nel tuo caso è myisam e non innodb.

  3. #3
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537
    Hai perfettamente ragione, infatti ho messo come motore InnoDb ed era funzionano.
    Ho provato ad aggiornate l'id nella tabella utente e la modifica si è riflettuta anche sull' id_utente della tabella scrivimessaggio in modo del tutto automatico.
    Però se io elimino l'utente logicamente viene anche rimossa la riga corrispondente nella tabella scrivimessaggio ma noto che la riga nella tabella messaggio rimane.
    Questo è un problema perchè i dati rimangono inconsistenti.
    Come posso risolvere?

  4. #4
    Originariamente inviato da wino_7
    Però se io elimino l'utente logicamente viene anche rimossa la riga corrispondente nella tabella scrivimessaggio ma noto che la riga nella tabella messaggio rimane.
    La tabella messaggio non ha una foreign key constraint.

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.