mysql foreign-keys cascade

mysql reserved words



MySQL RESTRICT y NO ACTION (3)

De la documentación de MySQL: https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html

Algunos sistemas de bases de datos tienen comprobaciones diferidas y NO ACTION es una comprobación diferida. En MySQL, las restricciones de clave externa se verifican inmediatamente, por lo que NO ACTION es lo mismo que RESTRICT.

¿Cuál es la diferencia en un FK de MySQL entre RESTRICT y NO ACTION ? Desde el documento se ven exactamente iguales. ¿Es este el caso? Si es así, ¿por qué tienen ambos?


Es cumplir con la sintaxis estándar de SQL. Como dice el manual : (énfasis mío)

NO ACCIÓN: Una palabra clave de SQL estándar . En MySQL, equivalente a RESTRICT. El servidor MySQL rechaza la operación de eliminación o actualización de la tabla principal si hay un valor de clave foránea relacionado en la tabla referenciada. Algunos sistemas de bases de datos tienen comprobaciones diferidas y NO ACTION es una comprobación diferida. En MySQL, las restricciones de clave externa se verifican inmediatamente, por lo que NO ACTION es lo mismo que RESTRICT.


Son idénticos en MySQL.

En el estándar SQL 2003 hay 5 acciones referenciales diferentes:

CASCADE RESTRICT NO ACTION SET NULL SET DEFAULT

La diferencia entre NO ACTION y RESTRICT es que, según la norma, NO ACTION se difiere, mientras que RESTRICT actúa inmediatamente.