Integridad referencial en MySQL

La integridad referencial se puede comprometer b�sicamente en tres situaciones: cuando se est� insertando un nuevo registro, cuando se est� eliminando un registro, y cuando se est� actualizando un registro. La restricci�n de clave for�nea que hemos definido se asegura que cuando un nuevo registro sea creado en la tabla venta, �ste debe tener su correspondiente registro en la tabla cliente.

Una vez que hemos creado las tablas, vamos a insertar algunos datos que nos sirvan para demostrar algunos conceptos importantes:

mysql> INSERT INTO cliente VALUES(1,'Juan Penas');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO cliente VALUES(2,'Pepe el toro');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO venta VALUES(1,1,23);
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO venta VALUES(3,2,81);
Query OK, 1 row affected (0.03 sec)

En este momento no hay ning�n problema, sin embargo, vamos a ver que sucede cuando intentamos insertar un registro en la tabla venta que se refiera a un cliente no existente cuyo id_cliente es 3:

mysql> INSERT INTO venta VALUES(2,3,39);
ERROR 1216: Cannot add or update a child row: a foreign key constraint fails

El hecho es que MySQL no nos permite insertar este registro, ya que el cliente cuyo id_cliente es 3 no existe. La restricci�n de clave for�nea asegura que nuestros datos mantienen su integridad. Sin embargo, �qu� sucede cuando eliminamos alg�n registro?. Vamos a agregar un nuevo cliente, y un nuevo registro en la tabla venta, posteriormente eliminaremos el registro de nuestro tercer cliente:

mysql> INSERT INTO cliente VALUES(3,'Pepe pecas');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO venta VALUES(2,3,39);
Query OK, 1 row affected (0.05 sec)

mysql> DELETE FROM cliente WHERE id_cliente=3;
ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails

Debido a nuestra restricci�n de clave for�nea, MySQL no permite que eliminemos el registro de cliente cuyo id_cliente es 3, ya que se hace referencia a �ste en la tabla venta. De nuevo, se mantiene la integridad de nuestros datos. Sin embargo existe una forma en la cu�l podr�amos hacer que la sentencia DELETE se ejecute de cualquier manera, y la veremos brevemente, pero primero necesitamos saber como eliminar (quitar) una clave for�nea.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR