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.
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.
No hay comentarios.