viernes, 23 de diciembre de 2016

Integridad Referencial - MariaDB y MySql

Hola,

Realizando una aplicación de control de almacén y ventas, me surgio la siguiente duda...
¿Que pasa si el cliente trata de borrar un dato desde la tabla "A" que esta tiene referencia con la tabla "B"?. Dicho de otro modo, por ejemplo tengo un cliente Pepito que compra 20 manzanas, se registra la venta y su id como cliente, y por cosas del destino (error de usuario) se elimina a Pepito de la lista de Clientes, si no se tiene cuidado, esto significaría que se elimina el id de Pepito de la venta o ventas ya realizadas anteriormente.

En estos casos y siempre se debe de tener en cuenta la integridad referencial.
Es decir indicar al crear la tabla que es lo que se debe de hacer cuando alguien va a eliminar o editar un dato de tablas referenciadas.

Esta es la sintaxis que encontramos en la web de Mysql:

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

Donde:
  • ON DELETE/UPDATE RESTRICT: Es la acción predeterminada, y no permite una eliminación si existe un registro asociado.
  • ON DELETE/UPDATE CASCADE: Si se especifica esta opción y una fila de la tabla padre se elimina, entonces también se elimina su clave foranea de la tabla hijo.
  • ON DELETE/UPDATE SET NULL: Las filas en la tabla hijo son actualizadas automáticamente colocando en las claves foraneas el valor Null.
  • ON DELETE/UPDATE NO ACTION:Realiza la misma acción que DELETE RESTRIC
  • ON DELETE/UPDATE 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.
A continuación el script de ejemplo



 Y el script ejecutado en MariaDB


 Espero le sirva el post.

No hay comentarios:

Publicar un comentario