2017-04-25 2 views
0

Existe-t-il un moyen de supprimer une table sur plusieurs bases de données à l'aide de MYSQL? J'utilise Sequel Pro mais je ne vois aucune option dans l'interface graphique pour le faire, donc je me demande s'il y a une sorte de commande qui peut le faire?Supprimer une table sur plusieurs bases de données

Le nom de la table est le même dans toutes les bases de données, et les supprimer un par un prend du temps. Cela aiderait vraiment à nettoyer les bases de données car nous en avons des centaines et ils partagent tous les mêmes tables. Cependant, certaines tables ne sont plus nécessaires et doivent être supprimées.

En espérant que quelqu'un puisse vous aider avec une requête pour cela.

+0

Vous pouvez obtenir une liste de bases de données avec la table du schéma d'informations, l'utilisation que pour écrire les instructions de table de dépôt et les exécuter dans une boucle suivante. –

+0

Que voulez-vous dire dans les bases de données? vous pouvez supprimer le nom de la table spécifiquement même si vous voulez en utiliser une boucle.Regardless si vous voulez supprimer toute la table de cette base de données spécifique –

+0

Je fais référence à la suppression de la même table sur plusieurs bases de données. Supposons par exemple que vous ayez 200 bases de données qui ont toutes la même structure de table et que vous n'avez plus besoin de quelques tables. Je demandais comment obtenir une liste de toutes les bases de données et de la table et exécuter une table de suppression sur toutes ces bases de données. – Cole

Répondre

1

Vous devez exécuter une instruction DROP individuelle pour chaque table.

Nous pouvons interroger INFORMATION_SCHEMA.TABLES pour obtenir une liste des tables ...

SELECT t.table_schema, t.table_name 
    FROM information_schema.tables t 
WHERE t.table_name = 'tablename_i_want_to_drop' 
    AND t.table_schema NOT IN ('mysql','information_schema','performance_schema') 
ORDER BY t.table_schema, t.table_name 

Et nous pouvons utiliser une expression au lieu des colonnes ...

SELECT CONCAT('DROP TABLE `',t.table_schema,'`.`',t.table_name,'` ;') AS `-- stmt` 
    FROM ... 

Ensuite, nous pouvons prendre ce resultset sauvegarder et exécuter les instructions d'un script. Le client de ligne de commande MySQL permet à la source d'un script ...

https://dev.mysql.com/doc/refman/5.7/en/mysql-batch-commands.html

Le client que vous utilisez peut avoir une fonction similaire, d'exécuter un script. Ou en quelque sorte copier le resultset et le coller dans une fenêtre de requête.


Dans un programme enregistré MySQL, nous pourrions exécuter cette même requête (pour obtenir une liste des tables), puis boucle ceux (avec un curseur) et PRÉPARER, EXECUTE et DEALLOCATE PRÉPARER pour exécuter « drop table "déclarations. C'est une option, mais pour une prise de vue unique, la création du script serait plus facile.

+0

Le script du haut fonctionnait très bien pour obtenir une sortie de liste. Je peux exporter cette liste ou la copier assez facilement dans Sequel Pro. Pourriez-vous élaborer davantage sur ce à quoi ressemblerait ce script ou puis-je simplement lancer la deuxième partie en remplaçant la ligne du haut et exécuter la même chose que le script? – Cole

+0

L'exécution de l'instruction SELECT génère simplement un jeu de résultats. Le résultat se trouve être un ensemble d'instructions DROP. (Je n'utilise que SQL pour générer du SQL.) Il s'agit d'un processus en deux étapes, 1) générer les instructions DROP, et 2) comme une étape distincte. exécuter les instructions DROP. Nous avons besoin d'un programme client pour faire cela ... 1) exécuter le SELECT et 2) exécuter les instructions DROP. La seule façon de faire cela en un seul appel au serveur de base de données serait d'appeler une procédure stockée MySQL. La procédure serait le client effectuant les deux étapes. (Évidemment, nous devrions d'abord écrire cette procédure.) – spencer7593

+0

Cela a fonctionné très bien. J'ai été capable de coller facilement la première commande pour obtenir les instructions de baisse dans la section de requête de suite pro. Après avoir copié les instructions de suppression et les avoir collées dans une nouvelle zone de requête, j'ai pu exécuter cela et exécuter chaque requête et supprimer les tables. Merci pour l'aide. – Cole