2010-02-03 14 views
23

¿Cómo se usa la palabra clave references al crear una tabla?¿Cómo usar la palabra clave 'referencias' en MySQL?

Digamos que quiero crear dos tablas person y hobby y quiero que la id de la tabla de pasatiempos haga referencia a la identificación de la persona?

person table 
- id 
- name 

hobby 
- id 
- person_id 
- hobby_name 

¿Cómo puedo hacer eso?

+1

Digno de mención, un FK en línea ('HobbyID INT REFERENCES Hobbies (ID)' NO funciona). Esto fue reportado recientemente como un error (http://bugs.mysql.com/bug.php?id=4919), así que estoy seguro de que se encargarán pronto. –

Respuesta

28

crear la tabla manía de manera similar a esto:

CREATE TABLE hobby (
    id INT NOT NULL AUTO_INCREMENT, 
    person_id INT NOT NULL, 
    hobby_name VARCHAR(255), 
    PRIMARY KEY(id), 
    FOREIGN KEY(person_id) REFERENCES person(id)) 
6

Aquí es un ejemplo directly from MySQL website:

CREATE TABLE parent (id INT NOT NULL, 
        PRIMARY KEY (id) 
) ENGINE=INNODB; 

CREATE TABLE child (id INT, parent_id INT, 
        INDEX par_ind (parent_id), 
        FOREIGN KEY (parent_id) REFERENCES parent(id) 
        ON DELETE CASCADE 
) ENGINE=INNODB; 
+0

¿qué es el señor "ON DELETE CASCADE"? – sasori

+2

@sasori - significa que cuando elimina un registro en la tabla principal, también se eliminarán todos los registros en la tabla secundaria con las referencias fk a principal. esto se conoce como "eliminación en cascada". –

6
CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id)); 

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL, 
PRIMARY KEY(hobby_id), 
FOREIGN KEY(person_id) REFERENCES person(person_id)); 

La palabra clave referencias se utiliza para definir qué tabla y la columna se utiliza en una relación de clave externa. Esto significa que un registro en la tabla de pasatiempos debe tener un id_persona que existe en la tabla de personas o, de lo contrario, en el momento de la inserción recibirá un error de que la clave no existe.

Para responder a su pregunta anterior sobre lo que hace "ON DELETE CASCADE", le permite eliminar un registro de clave principal (en persona) y sus correspondientes registros secundarios (en hobby) sin tener que borrar primero todos los registros secundarios.

Para aclarar, si usted tiene niños registros enlazados a una entrada de clave principal y se intenta eliminar la entrada de clave principal como:

DELETE FROM person where person_id = 1; 

sin tener el borrado en la CASCADE, que recibiría un error si cualquier los registros en hobby tenían person_id's de 1. Debería haber eliminado todos esos registros antes de hacer la eliminación anterior. Con DELETE ON CASCADE utilizado, la eliminación anterior tendrá éxito y se eliminarán automáticamente todos y cada uno de los registros de la tabla de pasatiempos vinculados al person_id que se eliminó de la tabla de claves principales.

1

La palabra clave de referencia se usa en realidad para saber dónde ha llegado la clave externa. Eso significa cuál es el nombre de la tabla y cuál es el nombre de esto en esa tabla.

me dicen que esto es correcto:

CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id)); 

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL, 
PRIMARY KEY(hobby_id), 
FOREIGN KEY(person_id) REFERENCES person(person_id)); 

Entonces, mira a esta línea: EXTERIOR CLAVE (person_id) REFERENCIAS persona (person_id));

Aquí person_id es la clave externa y procede de la tabla de personas y en esa tabla su nombre es person_id ... Eso es todo.

-1

Aquí hay un ejemplo de cómo puede usarlo.

create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id)); 

Por lo que significa, references nos permite para especificar la columna de la tabla de destino a la que se refiere una clave externa.

Cuestiones relacionadas