Procédures stockées et triggers
<<<
Les clés étrangères Les vues
>>>

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 :

  • 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. 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 :

  • 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.
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;
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 .

<< Les clés étrangères >>
Procédures stockées et triggers Différences entre MySQL et le standard SQL-92 Les vues