respuesta es correcto, si y solo si el motor de almacenamiento admite y aplica restricciones de clave externa.
Si las tablas se crean con Engine=MyISAM
, entonces tampoco b. o d. es correcto.
Si las tablas se crean con Engine=InnoDB
, luego d. es correcto.
NOTA:
Esto es cierto para InnoDB si y solo si FOREIGN_KEY_CHECKS = 1
; si FOREIGN_KEY_CHECKS = 0
, luego un DELETE
de la tabla principal (foo) no eliminar filas de la tabla secundaria (foo2) que hacen referencia a una fila eliminada de la tabla principal.
Verifique esto con la salida de SHOW VARIABLES LIKE 'foreign_key_checks'
(1=ENCENDIDO, 0=APAGADO)(El valor predeterminado normal es que esté ENCENDIDO).
La salida de SHOW CREATE TABLE foo
mostrará qué motor usa la tabla.
La salida de SHOW VARIABLES LIKE 'storage_engine'
mostrará el motor predeterminado utilizado cuando se crea una tabla y no se especifica el motor.