Réponse D. est correct, si et seulement si le moteur de stockage prend en charge et applique réellement les contraintes de clé étrangère.
Si les tables sont créées avec Engine=MyISAM
, alors ni b. ou d. est correct.
Si les tables sont créées avec Engine=InnoDB
, puis d. est correct.
REMARQUE :
Ceci est vrai pour InnoDB si et seulement si FOREIGN_KEY_CHECKS = 1
; si FOREIGN_KEY_CHECKS = 0
, puis un DELETE
de la table parent (foo) ne sera pas supprimer les lignes de la table enfant (foo2) qui font référence à une ligne supprimée de la table parent.
Vérifiez cela avec la sortie de SHOW VARIABLES LIKE 'foreign_key_checks'
(1=ON, 0=OFF)(La valeur par défaut normale est que ceci soit activé.)
La sortie de SHOW CREATE TABLE foo
montrera quel moteur la table utilise.
La sortie de SHOW VARIABLES LIKE 'storage_engine'
affichera le moteur par défaut utilisé lorsqu'une table est créée et que le moteur n'est pas spécifié.