2010-09-15 13 views
15

Dans une réponse sur Stack Overflow, j'ai vu ce code:Que sont les clés étrangères 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) 
); 

Je ne l'ai jamais utilisé le mot-clé de la relation « clé étrangère » avant.

  • Qu'est-ce que c'est?
  • Pourquoi les gens l'utilisent-ils?
  • Offre-t-il des avantages autres que la sémantique?
+0

duplication possible de [Qu'est-ce qu'une clé étrangère?] (Http://stackoverflow.com/questions/655446/what-exactly-is-a-foreign-key) –

+0

http://stackoverflow.com/questions/1730837/can-quelqu'un-expliquer-mysql-foreign-keys –

Répondre

14

Une clé étrangère est une référence à une clé primaire dans une autre table ou la table elle-même. Il est utilisé pour ce qu'on appelle referential integrity. Fondamentalement dans votre table fournie, pour qu'un enregistrement soit inséré dans Favorites - vous devez fournir un user_id valide du tableau Users et un movie_id valide du tableau Movies. Avec les clés étrangères applique, je ne pouvais pas supprimer un enregistrement de Users ou Movies. Si je n'avais pas de clés étrangères, je pourrais supprimer ces enregistrements. Ensuite, si je faisais un SELECT ... JOIN sur Favorites il casserait.

Voir Wikipedia.

+0

Pourquoi est-il utilisé? J'ai eu plusieurs tables avec des relations plusieurs-à-plusieurs, et j'ai travaillé «très bien» sans définir explicitement ces relations. –

+0

Fondamentalement, il permet de garder vos données propres. –

+0

Donc ... cela oblige MySQL à vérifier que l'ID existe et génère une erreur, en omettant d'insérer l'enregistrement s'il n'existe pas? –

12

Une clé étrangère décrit une relation entre deux tables. Il a de nombreux avantages:

  • Vous pouvez appliquer que si une valeur est dans la table, elle doit également exister dans l'autre table. Toute tentative de casser cette contrainte donnera une erreur.
  • Il permet aux administrateurs de bases de données ou aux programmeurs de comprendre plus facilement la relation entre les tables en examinant simplement les définitions de tables.
  • Il permet aux outils d'inspecter le schéma et de dessiner des diagrammes montrant les relations entre les tables, ou de créer des classes où les enfants d'un objet sont accessibles depuis le parent via des membres.
  • Dans InnoDB, l'ajout d'une clé étrangère ajoute automatiquement un index sur cette colonne afin que la jointure puisse être effectuée efficacement dans les deux sens. (Source)

Si vous utilisez MyISAM, les clés étrangères ne sont pas prises en charge.

1

Vous pouvez également ajouter la possibilité de cascade lorsqu'un enregistrement associé est supprimé. Par exemple, si j'ai une table de bibliothèque avec beaucoup de livres dans une table "livre" et que je supprime une bibliothèque donnée de ma table de bibliothèque, ses registres de livres dépendants seront également supprimés.

Questions connexes