Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB <<< |
Contraintes de clés étrangères FOREIGN KEY | InnoDB et la réplication MySQL >>> |
16.7 Créer des tables InnoDB 16 Tables InnoDB Manuel de Référence MySQL 4.1 : Version Française . Comment utiliser les transactions de InnoDB avec différentes API . Convertir des tables MyISAM vers InnoDB . Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB ->Contraintes de clés étrangères FOREIGN KEY . InnoDB et la réplication MySQL . Multiple tablespaces - putting each table into its own .ibd file |
16.7.4 Contraintes de clés étrangères FOREIGN KEYDepuis la version 3.23.43b, InnoDB respecte les contraintes de clé étrangères. InnoDB est le premier moteur de tables MySQL qui vous permet de définir des contraintes de clés étrangères, pour protéger l'intégrité de vos données.La syntaxe des définitions de contraintes de clés étrangères de InnoDB est la suivante :
Si MySQL vous retourne une numéro d'erreur 1005 lors de la comande CREATE TABLE , et un message d'erreur de numéro 150, alors la création de la table a échoué à cause de la contrainte de clé étrangère, qui n'a pas été correctement formulée. Similairement, si une commande ALTER TABLE échoue et indique une erreur 150, c'est que la définition de la clé étrangère est incorrectement formulée dans la table modifiée. Depuis la version 4.0.13, vous pouvez utiliser la commande SHOW INNODB STATUS pour avoir une explication détaillée de la dernière erreur de clé étrangère InnoDB sur le serveur. Depuis la version 3.23.50, InnoDB ne vérifie pas la clé étrangère pour les clés étrangères ou les clés référencées qui contienent des valeurs NULL .Une entorse aux standards : si dans la table parente, il y a plusieurs lignes qui ont la même valeur de clé référencée, alors InnoDB effectue les vérifications de clé étrangères comme si les autres parents avec la même valeur de clé n'existaient pas. Par exemple, si vous avez défini une contrainte de type RESTRICT et qu'il y a une ligne fille avec plusieurs lignes parente, InnoDB n'acceptera pas l'effacement d'aucun des parents. Depuis la version 3.23.50, vous pouvez aussi associer la clause ON DELETE CASCADE ou ON DELETE SET NULL avec la contrainte de clé étrangère. Les optoins correspondante ON UPDATE sont disponibles depuis la version 4.0.8. Si ON DELETE CASCADE est spécifiée, et qu'une ligne de la table parente est effacée, alors InnoDB va automatiquement effacer toute les lignes qui sont dans la table fille et dont les valeurs de clé étrangère sont celles référencées dans la ligne parente. Si ON DELETE SET NULL est spécifiée, les lignes filles sont automatiquement modifiée pour que la colonne de la clé étrangère prenne la valeur de NULL .Une entorse aux standards : si ON UPDATE CASCADE ou ON UPDATE SET NULL cascade récursivement jusqu'à la même table, elle agira comme pour un RESTRICT . Cela est fait pour éviter les boucles infinies des modifications en cascade. Une clause ON DELETE SET NULL auto-référente, d'un autre coté, fonctionne depuis la version 4.0.13. La clause ON DELETE CASCADE auto-référente à toujours fonctionné. Un exemle :
Si vous voulez ignorer les contraintes de clés étrangères durant, par exemple, une opération de LOAD DATA , vous pouvez utiliser la commande SET FOREIGN_KEY_CHECKS=0 . InnoDB vous permet d'effacer n'importe quelle table, même si cela va casser les contraintes de clés étranègres qui référence cette table. Lorsque vous supprimez une table, la contrainte de clé étrangère qui y était attachée est aussi supprimée.Si vous recréez une table qui a été supprimée, sa définition doit se conformer aux contraintes des clés étrangères qui la référencent. Elle doit avoir les bons types et noms de colonnes, et doit avoir les bonnes clés, comme indiqué ci-dessus. Si ces contraintes ne sont pas vérifiées, MySQL vous gratifiera d'une erreur 1005, et vous enverra lire le message numéro 150. Depuis la version 3.23.50 InnoDB retourne la définition de clé étrangère lorsque vous utilisez la commande
|
<< | Contraintes de clés étrangères FOREIGN KEY | >> |
Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB | Créer des tables InnoDB | InnoDB et la réplication MySQL |