2010-06-22 11 views

Respuesta

12

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.

+0

Cuando utiliza REFERENCIAS, creo que también espera que la tabla exista por el lado de la relación. – Donato

2

La palabra clave REFERENCES muestra una restricción de clave externa, lo que significa que:

FOREIGN KEY (`chat_id`) REFERENCES `chats`.`chat` (`id`) 

... chat_id la columna en la tabla actual sólo puede contener valores que ya existen en chat mesa, id columna.

Por ejemplo, si la columna CHAT.id contiene:

id 
---- 
a 
b 
c 

.you no puede agregar cualquier valor distinto de a/b/c en la columna de la chat_id.