Gestire le Foreign Keys in MySQL
Creare Foreign Key con MySQL è abbastanza semplice.
Create le tabelle di tipo InnoDB e in fase di creazione della tabella aggiungete le FK:
CREATE TABLE libro ( id INT auto_increment, titolo VARCHAR (200), editore INT NOT NULL, PRIMARY KEY id (id), INDEX editore_key (editore), FOREIGN KEY (editore) REFERENCES editore(id) ON DELETE NO ACTION ON UPDATE NO ACTION) TYPE=InnoDB;
Come vedete abbiamo impostato una FK che si riferisce ad una tabella editore.
Il problema però è come gestire poi le relazioni quando andiamo a modificare/eliminare dei valori nella tabella collegata.
Se vedete qua abbiamo usato NO ACTION:
ON DELETE NO ACTION
ON UPDATE NO ACTION
Ci sono però diverse altre azioni disponibili.
Ve le elenco.
CASCADE
La cancellazione o la modifica di un record nella tabella padre genererà la cancellazione o la modifica dei record collegati nella tabella figlia.
Quindi se cancelliamo un editore cancelleremo tutti i libri collegati; se modifichiamo un editore cambiando, ad esempio l'id, sostituiremo il valore del campo editore anche nella tabella libri.
SET NULL
Attivabile solo se il campo della tabella figlio non è impostato su NOT NULL.
In caso di eliminazione o modifica di un record nella tabella padre i record collegati della tabella figlia verranno modificati impostando il campo NULL.
NO ACTION o RESTRICT
Con queste due azioni il processo viene bloccato.
SET DEFAULT
Definita nello standard SQL ma non implentata in MySQL.
mysql fireign key cascade no action restrict
Commentami!