| 1.8.5 Différences entre MySQL et le standard SQL-92
 1.8 Quels standards respecte MySQL?
 1 Informations générales
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Sous-requêtes
 . SELECT INTO TABLE
 . Transactions et opérations atomiques
 . Procédures stockées et triggers
 ->Les clés étrangères
 . Les vues
 . '--' comme début de commentaire
 
 
 | 
  1.8.5.5 Les clés étrangères   
 
En MySQL version 3.23.44 et plus récentes, les tables  
InnoDB
  supportent
les vérifications d'intégrité référentielles.  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 : 
 
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.
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.
 
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.  Problèmes avec le 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.  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 : 
 
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 :
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.  Contraintes 
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.
 Syntaxe de 
JOIN
 .  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
 .| 
SELECT * FROM t1, t2 WHERE t1.id = t2.id;
 | 
 |