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

Notez que les clés en SQL ne sont pas utilisées pour joindre des tables, mais pour assurer l'intégrité référentielle (contraintes de clés étrangères). Si vous voulez obtenir des résultats issus de tables multiples avec une commande SELECT , vous allez joindre les tables comme ceci :

SELECT * FROM table1,table2 WHERE table1.id = table2.id;
Syntaxe de JOIN . Utiliser les clefs é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. 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.

La syntaxe FOREIGN KEY dans la clause ON DELETE ... est principalement utilisée pour des raisons de documentation. Certaines applications ODBC peuvent utiliser cette clause pour produire des conditions WHERE automatiques, mais c'est généralement simple à éviter. FOREIGN KEY est parfois utilisé pour vérifier une contrainte, mais cette vérification n'est pas nécessaire en pratique, si les lignes sont insérées dans la table dans le bon ordre.

Avec le serveur MySQL, vous pouvez contourner le problème de l'absence de la clause ON DELETE ... en ajoutant la commande DELETE appropriée dans l'application, lorsque vous effacez une ligne dans une table qui a une clé étrangère. En pratique, cette technique est aussi rapide (et même parfois plus rapide), et bien plus portable que l'utilisation des clés étrangères.

Avec le serveur MySQL 4.0, vous pouvez utiliser les commandes d'effacement multi-tables pour effacer des lignes dans plusieurs tables en une seule commande. Syntaxe des DELETE .

Dans un futur proche, nous allons étendre l'implémentation de la clause FOREIGN KEY pour que cette information soit stockée dans le fichier de spécification des tables et puisse être lu par mysqldump et ODBC. Dans une étape ultérieure, nous allons implémenter les contraintes de clé étrangère pour les applications qui ne peuvent pas être codées sans.

Gardez bien en tête que les clés étrangères sont souvent méconnues, ce qui peut causer de graves problèmes. Même lorsqu'elles sont utilisées correctement, ce n'est pas une solution magique pour les problèmes d'intégrité référentielle, même si cela simplifie parfois les choses.

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.
  • 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.
Inconvénients :
  • Les erreurs, qui sont faciles à faire durant la conception des relations, peuvent causer des problèmes graves : par exemple, des règles de contrainte circulaires, ou des combinaisons erronées d'effacement.
  • Une application correctement écrite s'assure d'elle-même de l'intégrité référentielle des données avant d'exécuter une requête. De ce fait, les vérifications supplémentaires de la base sont inutiles et réduisent les performances de l'application.
  • Il n'est pas rare pour un administrateur de bases de données de faire une topologie complexe des relations entre tables qui rendent très complexe, voire impossible de restaurer des tables.

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