foreign - truncate table mysql
¿Cuál es el comportamiento predeterminado de MySQL ON DELETE? (1)
Estoy tratando de analizar los docs MySQL. Podrían ser más claros. Lo que parecen estar diciendo es que hay cinco posibilidades: SET NULL, NO ACTION, RESTRICT, CASCADE y SET DEFAULT.
NO ACTION y RESTRICT hacen lo mismo (evita cualquier cambio de base de datos que rompa un FK) y esa es la opción predeterminada, por lo que si omites una cláusula ON DELETE estás diciendo NO ACTION (o RESTRICT - lo mismo).
SET NULL permite la eliminación de una fila principal, establece el FK en NULL.
CASCADA borra la fila hijo.
SET DEFAULT nunca debe usarse.
¿Es esto más o menos correcto?
Si es correcto:
SIN ACCIÓN : [...] InnoDB rechaza la operación de eliminación o actualización de la tabla principal.
RESTRICT : rechaza la operación de eliminación o actualización de la tabla principal. Especificar RESTRICT (o NO ACTION) es lo mismo que omitir la cláusula ON DELETE o ON UPDATE. [...]
Al parecer NO ACTION
y RESTRICT
son sinónimos. Además, como se usan cuando no hay una cláusula ON DELETE / UPDATE
, este es el comportamiento predeterminado.
SET NULL : elimine o actualice la fila de la tabla principal y establezca la columna o columnas de clave externa en la tabla secundaria en NULL. [...]
La columna externa se establece en NULL, siempre que no se declare como NOT NULL (o InnoDB no permitirá la eliminación o actualización).
CASCADA : elimine o actualice la fila de la tabla principal y elimine o actualice automáticamente las filas coincidentes en la tabla secundaria. [...]
Cascada elimina (o actualiza) la columna externa.
SET DEFAULT : el analizador reconoce esta acción, pero InnoDB rechaza las definiciones de tabla que contienen las cláusulas ON DELETE SET DEFAULT o ON UPDATE SET DEFAULT.
Así que básicamente no puedes usar esa opción.