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.