En MySQL version 3.23.44 et plus récentes, les tables
          InnoDB supportent les vérifications
          d'intégrité référentielles. See Chapitre 15, Le moteur de tables InnoDB.
          Pour les autres types de tables, le serveur mySQL accepte la
          syntaxe FOREIGN KEY dans la commande
          CREATE TABLE, mais ne la prend pas en
          compte.
        
          Pour les autres moteurs de stockage que
          InnoDB, MySQL analyse la clause
          FOREIGN KEY de la commande CREATE
          TABLE, mais ne l'utilise pas et ne la stocke pas.
          Dans le futur, l'implémentation va stocker cette information
          dans le fichier de spécifications de tables, pour qu'elle
          puisse être lue par mysqldump et ODBC.
          Ultérieurement, les contraintes de clé étrangères seront
          incluses dans les tables MyISAM.
        
Voici des avantages aux contraintes de clés étrangères :
En supposant que les relations soient proprement con¸ues, les clés étrangères rendent plus difficile pour un programmeur d'insérer des valeurs incohérentes dans la base.
La vérification centralisée de contraintes par le serveur de base de données rend inutiles l'application de ces vérifications du coté de l'application. Cela élimine la possibilité que d'autres applications ne fassent pas les vérifications de la même fa¸on que les autres.
L'utilisation des modifications et effacement en cascade simplifie le code du client.
Les règles de clés étrangères proprement con¸ues aident à la documentation des relations entre les tables.
Gardez bien en tête que ces avantages ont un coût supérieur pour le serveur de bases, qui doit effectuer les tests. Les vérifications supplémentaires affectent les performances, ce qui est parfois suffisamment rebutant pour des applications qui les éviteront. Certaines applications commerciales ont placé la logique de vérification dans l'application, pour cette raison.
          MySQL donne aux développeurs de bases de données le choix de
          leur approche. Si vous n'avez pas besoin des clés
          étrangères, et que vous voulez éviter leur surcoût, vous
          pouvez choisir un autre type de table, comme
          MyISAM. Par exemple, les tables
          MyISAM sont extrêmement rapides pour les
          applications qui font essentiellement des opérations
          INSERT et SELECT, car
          elles peuvent être utilisées simultanément. See
          Section 7.3.2, « Problème de verrouillage de tables ».
        
Si vous décidez de ne pas tirer avantage des contraintes d'intégrité, vous devez garder en tête ces conseils :
En l'absence de vérification du coté du serveur, l'application doit se charger de ces vérifications. Par exemple, elle doit s'assurer que les lignes sont insérées dans le bon ordre, et que les lignes ne sont pas orphelines. Il faut aussi pouvoir rattraper une erreur au milieu d'une opération multiple.
              Si la clause ON DELETE est la seule
              fonctionnalité nécessaire, notez que depuis MySQL
              version 4.0, vous pouvez utiliser des commandes
              DELETE multi-tables pour effacer les
              lignes dans plusieurs tables en une seule commande. See
              Section 13.1.1, « Syntaxe de DELETE ».
            
              Un palliatif au manque de ON DELETE est
              d'ajouter la commande DELETE
              appropriée lorsque vous effacez des lignes dans une table
              qui dispose d'une clé étrangère. En pratique, c'est
              souvent plus rapide que d'utiliser les clés étrangères,
              et c'est plus portable.
            
Soyez conscient que l'utilisation des clés étrangères dans certaines circonstances peuvent conduire à des problèmes :
Les clés étrangères règlent des problèmes de cohérence, mais il est nécessaire de concevoir les contraintes correctement, pour éviter les contraintes circulaires, ou des cascades d'effacements incorrects.
              Il n'est pas exceptionnel pour un administrateur de créer
              une topologie de relations qui rende difficile la
              restauration de bases à partir d'une sauvegarde. MySQL
              résout ce problème en vous permettant de désactiver
              temporairement les contraintes. See
              Section 15.7.4, « Contraintes de clés étrangères FOREIGN KEY ». Depuis
              MySQL 4.1.1, mysqldump génère un
              fichier d'export qui exploite cette possibilité de
              désactivation automatique à l'import.
            
          Notez que les clés étrangères SQL sont utilisées pour
          assurer la cohérence des données, et non pas pour joindre
          des tables. Si vous voulez obtenir des résultats de tables
          multiples dans une commande SELECT, vous
          devez le faire avec une jointure :
        
SELECT * FROM t1, t2 WHERE t1.id = t2.id;
          See Section 13.1.7.1, « Syntaxe de JOIN ». See
          Section 3.6.6, « Utiliser les clefs étrangères ».
        
          La syntaxe FOREIGN KEY sans ON
          DELETE ... est souvent utilisée par les
          applications ODBC pour produire automatiquement des clauses
          WHERE.
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

