Eliminar registros en la base de datos con claves ajenas

Cuando trabajas en un proyecto grande, sabrás que es grande por que el esquema de base de datos en papel ocupa media docena de folios y colgado en la pared ocupa media sala, tienes que tener mucho cuidado con qué haces y cómo lo haces.

Imagina por un momento que tienes más de 100 tablas en tu base da datos y alguna, relacionada con otras 10 y haces una inserción, si has realizado un diseño correcto habrás asignado tanto claves primarias como ajenas pero.. ¿te has parado a pensar cómo vas a borrar los datos que has metido en las pruebas?

A veces, hasta en los mejores diseños se comenten errores al intentar “cuadrar todas las claves” y si no has definido una forma correcta para eliminar registros las vas a pasar canutas para eliminar los datos de las pruebas ;)

Eliminación de registros con claves ajenas

Una de las principales ventajas de las claves ajenas es que permiten eliminar y actualizar registros en cascada. Si intentamos eliminar un registro de una tabla con clave ajena, no nos lo permitirá mientras exista relación con otro registro en otra tabla, al menos, así es como se define por defecto, pero podemos cambiarlo.

Esto es llamado eliminación en cascada, en donde todos los registros relacionados son eliminados de acuerdo a las relaciones de clave foránea. Una alternativa es no eliminar los registros relacionados, y poner el valor de la clave ajena a NULL (asumiendo que el campo puede tener un valor nulo).

Las opciones estándar cuando se elimina una registro con clave foránea son:

  • ON DELETE RESTRICT
  • ON DELETE NO ACTION
  • ON DELETE SET DEFAULT
  • ON DELETE CASCADE
  • ON DELETE SET NULL

ON DELETE RESTRICT es la acción predeterminada, y no permite una eliminación si existe un registro asociado.

ON DELETE NO ACTION hace lo mismo que la anterior.

ON DELETE SET DEFAULT actualmente no funciona en MySQL – se supone que pone el valor de la clave foránea al valor por omisión (DEFAULT) que se definió al momento de crear la tabla.

ON DELETE CASCADE, si una fila en la tabla padre es eliminada, entonces se eliminarán las filas de la tabla hijo cuya clave foránea sea igual al valor de la clave referenciada en la tabla padre. Esta acción siempre ha estado disponible en MySQL.

ON DELETE SET NULL, las filas en la tabla hijo son actualizadas automáticamente poniendo en las columnas de la clave foránea el valor NULL. Si se especifica una acción SET NULL, debemos asegurarnos de no declarar las columnas en la tabla como NOT NULL.

Parte de esta información la tenía recopilada en un txt así que no puedo citar la fuente original, si alguien la sabe, que me lo diga y la pondré.

Fuente: http://www.mysql-hispano.org/page.php?id=27&pag=7

Artículos relacionados



Comentarios en Eliminar registros en la base de datos con claves ajenas

Hay 2 Comentarios en el artículo Eliminar registros en la base de datos con claves ajenas, ¿a qué esperas para dar tu opinión?


  1. truney dice:

    >Parte de esta información la tenía recopilada en >un txt así que no puedo citar la fuente original, si >alguien la sabe, que me lo diga y la pondré.

    Fuente: http://www.mysql-hispano.org/page.php?id=27&pag=7

Deja un comentario