| 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 InnoDB
Supposons 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 :
Vous pouvez demander la quantité d'espace disponible dans l'espace de tables InnoDB avec la commande de statut de MySQL pour toutes les tables de type TYPE = InnoDB . La quantité d'espace disponible apparait dans la section de commentaire de la commande SHOW . Par exemple :
Convertir une table MyISAM en InnoDB 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 :
Durant la conversion des grandes tables, vous devriez utiliser le buffer InnoDB en lui donnant une grande taille pour réduire les accès disques. Ne lui donnez pas une taille supérieure à 80% de votre mémoire physique. Vous devriez aussi avoir de grand fichiers de log et un buffer de log important. 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èresDepuis 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 :
Les colonnes correspondantes dans la clé étrangère doivent être de même type interne à InnDB, de façon à ce qu'elle puissent être comparées sans conversion. La taille et le signe des types entiers doivent être les mêmes . La taille des chaînes n'a pas besoin d'être les mêmes. 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 :
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 |