Antwoord d. correct is, als en alleen als de opslagengine daadwerkelijk beperkingen voor externe sleutels ondersteunt en afdwingt.
Als de tabellen zijn gemaakt met Engine=MyISAM
, dan geen van beide b. of d. klopt.
Als de tabellen zijn gemaakt met Engine=InnoDB
, dan d. klopt.
OPMERKING:
Dit geldt voor InnoDB als en alleen als FOREIGN_KEY_CHECKS = 1
; if FOREIGN_KEY_CHECKS = 0
, dan een DELETE
van de bovenliggende tabel (foo) zal niet verwijder rijen uit de onderliggende tabel (foo2) die verwijzen naar een rij die uit de bovenliggende tabel is verwijderd.
Controleer dit met de uitvoer van SHOW VARIABLES LIKE 'foreign_key_checks'
(1=AAN, 0=UIT)(De normale standaard is dat dit AAN staat.)
De uitvoer van SHOW CREATE TABLE foo
laat zien welke engine de tabel gebruikt.
De uitvoer van SHOW VARIABLES LIKE 'storage_engine'
toont de standaard engine die wordt gebruikt wanneer een tabel wordt gemaakt en de engine is niet gespecificeerd.