2010-09-15 28 views
15

En una respuesta de desbordamiento de pila, vi este código:¿Qué son las claves externas de MySQL?

CREATE TABLE Favorites (
    user_id INT NOT NULL, 
    movie_id INT NOT NULL, 
    PRIMARY KEY (user_id, movie_id), 
    FOREIGN KEY (user_id) REFERENCES Users(user_id), 
    FOREIGN KEY (movie_id) REFERENCES Movies(movie_id) 
); 

nunca he utilizado la palabra clave 'clave externa' relación antes.

  • ¿Qué es?
  • ¿Por qué la gente lo usa?
  • ¿Proporciona algún beneficio aparte de la semántica?
+0

posible duplicado de [¿Qué es exactamente una clave externa?] (Http://stackoverflow.com/questions/655446/what-excaly-is-a-foreign-key) –

+0

http://stackoverflow.com/questions/1730837/can-alguien-explique-mysql-foreign-keys –

Respuesta

14

Una clave externa es una referencia a una clave principal en otra tabla o en la tabla misma. Se utiliza para lo que se llama referential integrity. Básicamente en su tabla provista, para que un Registro se inserte en Favorites, deberá proporcionar un user_id válido de la tabla Users, y un movie_id válido de la tabla Movies. Con las claves foráneas se aplica, no pude eliminar un registro de Users o Movies. Si no tuviera claves externas, podría eliminar esos registros. Entonces, si hiciera un SELECT ... JOIN en Favorites, se rompería.

Ver Wikipedia.

+0

¿Por qué se usa? He tenido varias tablas con relaciones de muchos a muchos, y he trabajado 'muy bien' sin definir estas relaciones explícitamente. –

+0

Básicamente ayuda a mantener sus datos limpios. –

+0

Entonces ... ¿esto obliga básicamente a MySQL a verificar que el ID exista y arroja un error al no insertar el registro si no existe? –

12

Una clave externa describe una relación entre dos tablas. Tiene muchos beneficios:

  • Puede exigir que si un valor está en una tabla, también debe existir en la otra tabla. Cualquier intento de romper esta restricción dará un error.
  • Permite a los administradores de bases de datos o programadores comprender más fácilmente la relación entre las tablas con solo mirar las definiciones de la tabla.
  • Permite a las herramientas inspeccionar el esquema y dibujar diagramas que muestran las relaciones entre las tablas, o crear clases donde los hijos de un objeto son accesibles desde el padre a través de los miembros.
  • En InnoDB agregar una clave externa también agrega automáticamente un índice en esa columna para que la unión se pueda realizar de manera eficiente en cualquier dirección. (Source)

Si está utilizando MyISAM, las claves externas no son compatibles.

1

También puede agregar la capacidad de conectarse en cascada cuando se borra un registro relacionado. Por ejemplo, si tengo una tabla de biblioteca con muchos libros en una tabla de "libro" relacionada y elimino una biblioteca determinada de la tabla de mi biblioteca, también se eliminarán sus registros de libro dependiente.

Cuestiones relacionadas