La relación existente entre la clave ajena y la clave padre tiene implicaciones en el borrado y modificación de sus valores.
Si se modifica el valor de la clave ajena en la tabla hija, debe establecerse un nuevo valor que haga referencia a la clave principal de uno de los registros de la tabla padre. De la misma manera, no se puede modificar el valor de la clave principal en un registro de la tabla padre, y una clave ajena hace referencia a dicho registro.
Los borrados de registros en la tabla de referencia también puede suponer un problema, ya que no pueden suprimirse registros que son referenciados con una clave ajena desde otra tabla.
Suponiendo el siguiente ejemplo:
En el registro de la partida con nombre "PARTIDA01
" no puede ser modificado el campo Cod_Juego
al valor 4, porque no es una clave ajena válida, puesto que no existe un registro en la tabla JUEGOS
con esa clave primaria.
El código del juego "DAMAS
" no puede ser cambiado, ya que hay registros en la tabla PARTIDAS
que hacen referencia a dicho juego a través del campo Cod_Juego.
Si se eliminara en la tabla JUEGOS
el registro que contiene el juego "PARCHIS"
, la partida "PARTIDA05"
quedaría con un valor inválido en el campo Cod_Juego.
Cuando se hace el borrado o modificación de registros en una tabla de referencia, se puede configurar la clave ajena de diversas maneras para que se conserve la integridad referencial:
- No Permitir Supresión ni modificación: Es la opción por defecto. En caso de que se intente borrar o modificar en la tabla de referencia un registro que está siendo referenciado desde otra tabla, se produce un error en la operación de borrado impidiendo dicha acción.
- Supresión o modificación en Cascada (
ON DELETE CASCADE
): Al suprimir o modificar registros de la tabla de referencia, los registros de la tabla hija que hacían referencia a dichos registros, también son borrados o modificados. - Asignación de Nulo (
ON DELETE SET NULL
): Los valores de la clave ajena que hacían referencia a los registros que hayan sido borrados o modificados de la tabla de referencia, son cambiados al valorNULL
. - Valor por defecto (
ON DELETE DEFAULT
): Los valores de la clave ajena que hacían referencia a los registros que hayan sido borrados o modificados de la tabla de referencia, son cambiados al valor especificado por defecto.
En el caso de las modificaciones se cambiaría ON DELETE
por ON UPDATE