J’ai eu le besoin de déposer toutes les tables dans MySQL aujourd’hui. Le serveur de production ne dispose pas de phpMyAdmin, qui est mon outil préféré dans mon environnement de développement pour gérer les bases de données MySQL. J’étais donc coincé avec la console MySQL, et j’avais besoin d’un moyen facile de faire le travail.
Comme je dis toujours « Google it ».
J’ai trouvé un script élégant sur SOW. Dans cet article, je vais décrire ce qu’il fait ligne par ligne.
SET FOREIGN_KEY_CHECKS = 0;
Cette ligne désactive les contraintes de clé étrangère. Si deux tables sont associées l’une à l’autre, alors vous ne pouvez pas déposer l’une ou l’autre des tables. La contrainte de clé étrangère ne vous permet pas de le faire.
SET GROUP_CONCAT_MAX_LEN=32768;
Cette ligne définit la longueur maximale de la fonction CONCAT. Dans les lignes suivantes du script, vous verrez une concaténation. Dans certaines configurations MySQL, cette valeur peut être trop faible. Donc, afin d’éviter d’éventuelles erreurs, nous la fixons assez grande.
SET @tables = NULL;
C’est la variable dans laquelle nous stockons le nom des tables.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Rappellez-vous que tous vos schémas mysql sont stockés dans la base de données information_schema. SELECT DATABASE() est utilisé pour déterminer la base de données actuellement utilisée. Cette ligne sélectionne la liste des tables dans la base de données actuelle, et elle les décore avec le caractère (`), et le résultat final sera stocké dans la variable tables comme ceci, `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Cette ligne met « dummy » à la variable tables si la variable est NULL. Cette ligne garantit que la variable tables n’est jamais NULL.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Cette ligne ajoute « DROP TABLE IF EXISTS » devant votre variable tables. Le résultat final sera donc DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Il n’est pas nécessaire de séparer ces trois lignes. Ces lignes exécutent la phrase SQL dans la variable tables.
SET FOREIGN_KEY_CHECKS = 1;
Enfin, cette ligne active l’option de vérification de la contrainte de clé étrangère.
J’ai beaucoup aimé ce petit script. Il est vraiment très pratique. J’espère qu’il vous aidera à mieux comprendre le fonctionnement.