Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniería De Telecomunicaciones
Materia:
Gestión de base de Datos
Grupo:
01N25
2020
RESTRICCIONES
Las relaciones existentes entre distintas tablas de una base de datos MySQL que
utilizan el motor de almacenamiento InnoDB pueden estar especificadas en forma
de restricciones de clave externa (“Foreign Key Constraints”), de manera que la
propia base de datos impida que se realicen operaciones que provocarían
inconsistencias.
R// se deja borrar ya que esa ciudad con id 4 no tienen ningún dato relacionado.
Cannot delete or update a parent row: a foreign key constraint fails (db.personas,
CONSTRAINT personas_ibfk_1 FOREIGN KEY (ciudad_id)
REFERENCES ciudades (ciudad_id))
Porque el DELETE viola la restricción. Si la fila 1 de ciudades se borrase, las
filas 1 y 4 de personas quedarían huérfanas, o sea, sin relación en la tabla ciudades.
R// si se intenta borrar la ciudad con id 1, arroja un error ya que este id tiene
asociados dos datos de la tabla personas.
CASCADE
CASCADE: Borra los registros de la tabla dependiente cuando se borra el registro de la
tabla principal (en una sentencia DELETE), o actualiza el valor de la clave secundaria
cuando se actualiza el valor de la clave referenciada (en una sentencia UPDATE).
En la imagen vemos el resultado de esta consulta:
SET NULL
SET NULL: Establece a NULL el valor de la clave secundaria cuando se elimina el
registro en la tabla principal o se modifica el valor del campo referenciado.
Lo que vemos en la imagen es el resultado de esta consulta:
R// Podemos observar que al ingresar este comando se borrara la ciudad con el id
1 y todos los campos que dependieran de este id quedaran marcados o se le
establece un valor de nulo.
Imagen de A. Cedano para stackoverflow.es
Por lo que ocurre en este caso es importante señalar que este CREATE TABLE:
CREATE TABLE IF NOT EXISTS personas
(
persona_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
persona_nom VARCHAR(70),
ciudad_id INT NOT NULL,
FOREIGN KEY fk_ciudad(ciudad_id) REFERENCES ciudades(ciudad_id)
ON DELETE SET NULL
)ENGINE=INNODB;
Arrojará el error:
NO ACTION
NO ACTION: En MySQL funciona igual que RESTRICT. Ver explicación más abajo.
R// Se ingresa el comando DELETE FROM ciudades WHERE ciudad_id=1; como se ingresa
también en restrict y arroja el mismo error ya que No Action funciona de la misma
manera que el restrict y por eso no deja eliminar la ciudad con id 1 ya que tiene datos
que dependen de él.