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