Risposta d. è corretto, se e solo se il motore di archiviazione supporta e applica effettivamente vincoli di chiave esterna.
Se le tabelle vengono create con Engine=MyISAM
, quindi nemmeno b. o d. è corretto.
Se le tabelle vengono create con Engine=InnoDB
, quindi d. è corretto.
NOTA:
Questo vale per InnoDB se e solo se FOREIGN_KEY_CHECKS = 1
; se FOREIGN_KEY_CHECKS = 0
, quindi un DELETE
dalla tabella padre (foo) non rimuovi le righe dalla tabella figlio (foo2) che fanno riferimento a una riga rimossa dalla tabella padre.
Verificalo con l'output di SHOW VARIABLES LIKE 'foreign_key_checks'
(1=ON, 0=OFF)(L'impostazione predefinita normale è che sia ON.)
L'output da SHOW CREATE TABLE foo
mostrerà quale motore utilizza la tabella.
L'output da SHOW VARIABLES LIKE 'storage_engine'
mostrerà il motore predefinito utilizzato quando viene creata una tabella e il motore non è specificato.