Odpowiedź re. jest poprawne, wtedy i tylko wtedy, gdy silnik pamięci masowej faktycznie obsługuje i wymusza ograniczenia klucza obcego.
Jeśli tabele są tworzone za pomocą Engine=MyISAM
, to ani b. lub re. jest poprawne.
Jeśli tabele są tworzone za pomocą Engine=InnoDB
, a następnie d. jest poprawne.
UWAGA:
Dotyczy to InnoDB wtedy i tylko wtedy, gdy FOREIGN_KEY_CHECKS = 1
; jeśli FOREIGN_KEY_CHECKS = 0
, a następnie DELETE
z tabeli nadrzędnej (foo) nie usuń wiersze z tabeli podrzędnej (foo2), które odwołują się do wiersza usuniętego z tabeli nadrzędnej.
Sprawdź to za pomocą danych wyjściowych z SHOW VARIABLES LIKE 'foreign_key_checks'
(1=WŁ, 0=WYŁ)(Zwykłe ustawienie domyślne to WŁ.)
Dane wyjściowe z SHOW CREATE TABLE foo
pokaże, którego silnika używa tabela.
Dane wyjściowe z SHOW VARIABLES LIKE 'storage_engine'
pokaże domyślny silnik używany, gdy tworzona jest tabela, a silnik nie jest określony.