Créer des bases InnoDB <<< |
Créer des tables InnoDB | Ajouter et retirer des données et des logs InnoDB >>> |
7.5 Tables InnoDB 7 Types de tables MySQL Manuel de Référence MySQL 4.1 : Version Française . Présentation des tables InnoDB . Options de démarrage InnoDB . Créer des bases InnoDB ->Créer des tables InnoDB . Ajouter et retirer des données et des logs InnoDB . Sauver et restaurer une base InnoDB . Transférer une base de données InnoDB vers une autre machine . Modèle transactionnel de InnoDB . Implémentation du multi-versionnage . Structures de tables et d'index . Gestion de l'espace fichiers et des entrées/sorties disque . Gestion des erreurs . Restrictions sur les tables InnoDB . Historique de l'évolution InnoDB . Informations de contact InnoDB |
7.5.4 Créer des tables InnoDBSupposons que vous avez démarré le client MySQL avec la commande mysql test . Pour créer une table au format InnoDB vous devez spécifier le type TYPE = InnoDB lors de la création de table, dans la commande SQL :
InnoDB n'a pas d'optimisation particulière pour la création d'un fichier externe d'index. Donc, exporter pour réimporter les données n'apporte pas de gain de performances. La méthode la plus rapide pour donner à une table le format InnoDB est de faire les insertions directement dans la table InnoDB, avec la commande ALTER TABLE ... TYPE=INNODB , ou de créer une table vide InnoDB avec les mêmes caractéristiques, et d'insérer les lignes avec la commande INSERT INTO ... SELECT * FROM ... . Pour avoir un meilleur contrôle sur le processus d'insertion, c'est une bonne idée de faire les insertions par portions de table :
Assurez vous que vous avez toujours de l'espace pour les données : les tables InnoDB prennent bien plus de place que les tables MyISAM. Si une commande ALTER TABLE rencontre un problème d'espace disque, elle va s'annuler, et cela va prendre des heures si le disque est plein. Lors des insertions, InnoDB utilise un buffer d'insertion pour fusionner les index par groupe. Cela économise beaucoup d'accès disques. Lors d'une annulation, aucun mécanisme de ce type n'est utilisé, et l'annulation peut prendre jusqu'à 30 fois la durée de l'insertion. Dans le cas d'une annulation, si vous n'avez pas de données importante dans votre base, il est mieux de terminer le processus et de détruire les données InnoDB et les fichiers de log, ainsi que le fichier de table .frm , et de recommencer, plutôt que d'attendre les millions d'accès disques.Contraintes de clé étrangères Depuis la version 3.23.43b, InnoDB supporte les contraîntes de clé étrangères. InnoDB est le premier géstionnaire de tables MySQL qui permet de définir des contraîntes de clé étrangères pour assurer la cohérence de vos données.La syntaxe d'une clé étrangère avec InnoDB :
Depuis la version 3.23.50, vous pouvez aussi associer la clause ON DELETE CASCADE ou ON DELETE SET NULL avec les contraintes de clé étrangère. Si ON DELETE CASCADE est spécifié, et qu'une ligne de la table parente est effacée, alors InnoDB va automatiquement effacer la lgine dans la table fille, dont la clé étrangère est égale à la clé référencée dans la table parente. Si ON DELETE SET NULL est spécifié, les lignes de la table fille sont automatiquement modifiée de façon à ce que les colonnes dans la clé étrangère prennent automatiquement la valeur SQL de NULL.Depuis la version 3.23.50, InnoDB ne vérifie pas les contraintes de clé étrangère pour ces clés étrangères, ou les clés qui font référence à la valeur NULL. Depuis la version 3.23.50, InnoDB vous permet d'utiliser les guillemets américains (`) autour des noms de tables et colonnes dans la clause FOREIGN KEY ... REFERENCES ... mais InnoDB ne prend pas encore en compte l'option lower_case_table_names que vous pouvez spécifier dans le fichier my.cnf . Un exemple :
Lorsqu'il fait des vérifications de clé étrangères, InnoDB pose des verrous de lignes sur les lignes filles et mères qu'il doit utiliser. InnoDB vérifie les contraintes immédiatement : la vérification n'est pas reportée à la validation de la transaction. InnoDB vous permet d'effacer n'importe quelle table, même si cela casse la cohérence d'une clé étrangère, qui fait référence à la table. Lorsque vous effacez une table, les contraintes qui en faisaient parties sont aussi effacées.Si vous recréez une table qui a été effacée, elle doit avoir une définition qui satisfont les contraintes de clé étrangères. Elle doit avoir les bons noms et types de colonnes, ainsi que les index nécessaires. Si ces conditions ne sont pas remplies, MySQL retourne une erreur numéro 1005, et fait référence au numéro de message 150. Depuis la version 3.23.50, InnoDB retourne la définition de contrainte de clé étrangère lorsque vous appelez la commande
|
<< | Créer des tables InnoDB | >> |
Créer des bases InnoDB | Tables InnoDB | Ajouter et retirer des données et des logs InnoDB |