La palabra clave REFERENCIAS es parte de un foreign key constraint y hace que MySQL para requerir que el valor (s) en la columna (s) especificado de la tabla de referencia también están presentes en la especificada columna (s) de la tabla referenciada.
Esto evita que las claves foráneas hagan referencia a los identificadores que no existen o fueron eliminados, y puede evitar que elimine las filas mientras todavía se hace referencia a ellas.
Un ejemplo específico es si cada empleado debe pertenecer a un departamento, entonces puede agregar una restricción de clave externa de employee.departmentid
haciendo referencia a department.id
.
ejecutar el código siguiente para crear dos tablas de prueba tablea
y tableb
donde la columna a_id
en tableb
referencias a la clave principal de tablea
. tablea
se completa con algunas filas.
CREATE TABLE tablea (
id INT PRIMARY KEY,
foo VARCHAR(100) NOT NULL
) Engine = InnoDB;
INSERT INTO tablea (id, foo) VALUES
(1, 'foo1'),
(2, 'foo2'),
(3, 'foo3');
CREATE TABLE tableb (
id INT PRIMARY KEY,
a_id INT NOT NULL,
bar VARCHAR(100) NOT NULL,
FOREIGN KEY fk_b_a_id (a_id) REFERENCES tablea (id)
) Engine = InnoDB;
Ahora intente estos comandos:
INSERT INTO tableb (id, a_id, bar) VALUES (1, 2, 'bar1');
-- succeeds because there is a row in tablea with id 2
INSERT INTO tableb (id, a_id, bar) VALUES (2, 4, 'bar2');
-- fails because there is not a row in tablea with id 4
DELETE FROM tablea WHERE id = 1;
-- succeeds because there is no row in tableb which references this row
DELETE FROM tablea WHERE id = 2;
-- fails because there is a row in tableb which references this row
Nota importante: Ambas tablas deben ser InnoDB o la restricción se ignora.
Cuando utiliza REFERENCIAS, creo que también espera que la tabla exista por el lado de la relación. – Donato