J'utilise régulièrement "ON DELETE CASCADE" mais je n'utilise jamais "ON UPDATE CASCADE" car je ne suis pas sûr de la situation dans laquelle cela sera utile.
Pour les besoins de la discussion, voyons un peu de code.
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
Pour "ON DELETE CASCADE", si un parent avec un id
est supprimé, un enregistrement en enfant avec parent_id = parent.id
sera automatiquement supprimé. Cela ne devrait pas poser de problème.
-
Cela signifie que "ON UPDATE CASCADE" fera la même chose lorsque
id
du parent est mis à jour ? -
Si (1) est vrai, cela signifie qu'il n'est pas nécessaire d'utiliser "ON UPDATE CASCADE" si
parent.id
n'est pas actualisable (ou ne sera jamais actualisée) comme lorsqu'elle estAUTO_INCREMENT
ou toujours réglé pour êtreTIMESTAMP
. C'est bien ça ? -
Si (2) n'est pas vrai, dans quel autre type de situation devrions-nous utiliser "ON UPDATE CASCADE" ?
-
Que se passe-t-il si je mets à jour (pour une raison ou une autre) le fichier
child.parent_id
pour être quelque chose qui n'existe pas, sera-t-il alors automatiquement supprimé ?
Je sais que certaines des questions ci-dessus peuvent être testées par programme pour comprendre, mais je veux aussi savoir si tout cela dépend du fournisseur de la base de données ou non.
Veuillez m'éclairer.
1 votes
Voir aussi : stackoverflow.com/questions/6894162/