Saltar al contenido

Diferencia entre On Delete Cascade y On Update Cascade en mysql

este problema se puede resolver de diferentes maneras, sin embargo te dejamos la que en nuestra opinión es la resolución más completa.

Solución:

Un muy buen hilo sobre este tema se puede encontrar aquí y también aquí. La guía definitiva para MySQL es, por supuesto, la documentación, que se encuentra aquí.

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

  1. CASCADA
  2. RESTRINGIR
  3. NO HAY ACCION
  4. SET NULL
  5. ESTABLECER PREDETERMINADO

Para responder a la pregunta:

  1. CASCADA

    • ON DELETE CASCADE significa que si se elimina el registro principal, también se eliminarán los registros secundarios. Este es no una buena idea en mi opinión. Debe realizar un seguimiento de todos los datos que alguna vez han estado en una base de datos, aunque esto se puede hacer usando TRIGGERs. (Sin embargo, vea la advertencia en los comentarios a continuación).

    • ON UPDATE CASCADE significa que si el padre primario key cambia, el valor secundario también cambiará para reflejarlo. De nuevo, en mi opinión, no es una gran idea. Si estas cambiando PRIMARY KEYs con cierta regularidad (¡o incluso en absoluto!), hay algo mal en su diseño. Nuevamente, vea los comentarios.

    • ON UPDATE CASCADE ON DELETE CASCADE significa que si tu UPDATEODELETE padre, el cambio se transmite en cascada al hijo. Este es el equivalente de ANDlos resultados de las dos primeras declaraciones.

  2. RESTRINGIR

    • RESTRICT significa que cualquier intento de eliminar y / o actualizar el padre fallará y arrojará un error. Este es el comportamiento predeterminado en el caso de que no se especifique explícitamente una acción referencial.

      Por un ON DELETE o ON UPDATE que no se especifica, la acción predeterminada es siempre RESTRICT`.

  3. NO HAY ACCION

    • NO ACTION: Del manual. 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 elemento externo relacionado. key valor en la tabla referenciada. Algunos sistemas de bases de datos tienen comprobaciones diferidas y NO ACTION es un cheque diferido. En MySQL, extranjero key las restricciones se comprueban inmediatamente, por lo que NO ACTION es lo mismo que RESTRICT.
  4. SET NULL

    • SET NULL – nuevamente del manual. Elimine o actualice la fila de la tabla principal y configure el externo key columna o columnas en la tabla secundaria para NULL. En mi humilde opinión, esta no es la mejor de las ideas, principalmente porque no hay forma de “viajar en el tiempo”, es decir, mirar hacia atrás en las tablas secundarias y asociar registros con NULLs con el registro principal relevante, ya sea CASCADE o usar TRIGGERs para completar las tablas de registro para realizar un seguimiento de los cambios (pero, consulte los comentarios).
  5. ESTABLECER PREDETERMINADO

    • SET DEFAULT. ¡Otra parte (potencialmente muy útil) del estándar SQL que MySQL no se ha molestado en implementar! Permite al desarrollador especificar un valor al que establecer el valor externo. key columna (s) en una ACTUALIZACIÓN o BORRAR. InnoDB y NDB rechazarán las definiciones de tabla con un SET DEFAULT cláusula.

Como se mencionó anteriormente, debería dedicar un tiempo a consultar la documentación, aquí.

Estas dos son acciones que se deben realizar, respectivamente, cuando el registro al que se hace referencia en la tabla principal cambia su identificación y cuando se elimina.

Si ejecuta:

UPDATE parent SET id = -1 WHERE id = 1;

Y hay al menos un registro en child con parent_id = 1, 1) fallará; en los casos 2) y 3), todos los registros con parent_id = 1 se actualizan a parent_id = -1.

Si ejecuta:

DELETE FROM parent WHERE id = 1;

Y hay al menos un registro en child con parent_id = 1, 2) fallará; en los casos 1) y 3), todos los registros con parent_id = 1 se eliminan.

3) es sintácticamente correcto.

La documentación completa se puede encontrar en el manual.

No tengo suficiente reputación para comentar las respuestas anteriores. Así que pensé en elaborar un poco.

1) ON DELETE CASCADE significa que si se elimina el registro principal, también se eliminarán los registros secundarios de referencia. ON UPDATE tiene como valor predeterminado RESTRICT, lo que significa que la ACTUALIZACIÓN en el registro principal fallará.

2) La acción ON DELETE tiene como valor predeterminado RESTRICT, lo que significa que el DELETE en el registro principal fallará. ON UPDATE CASCADE actualizará todos los registros secundarios de referencia cuando se actualice el registro principal.

3) Ver las acciones de CASCADE en 1) y 2) arriba.

Sobre el uso de ID de registro principal como extranjeros keys (en tablas secundarias) – la experiencia dice a) si los ID son números de secuencia generados automáticamente, NO los use como foráneos keys. Utilice algún otro padre único key en lugar de. b) si los ID son GUID, entonces está bien usarlos como extranjeros keys. Verá la sabiduría de esta sugerencia cuando exporte e importe los registros o los copie a otra base de datos. Es demasiado engorroso lidiar con números de secuencia generados automáticamente durante la migración de datos cuando se hace referencia a ellos como externos keys.

Sección de Reseñas y Valoraciones

Acuérdate de que puedes optar por la opción de agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *