Vous ne pouvez pas le faire avec une seule commande MySQL, mais vous pouvez utiliser MySQL pour construire l'instruction pour vous:
Dans le shell MySQL ou via PHPMyAdmin, utilisez la requête suivante
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
Cela générera une instruction DROP que vous pourrez ensuite copier et exécuter pour supprimer les tables.
EDIT: Un avertissement ici - l'instruction générée ci-dessus supprimera toutes les tables de toutes les bases de données avec ce préfixe. Si vous souhaitez le limiter à une base de données spécifique, modifiez la requête pour qu'elle ressemble à ceci et remplacez nom_base_de_données par votre propre nom_base_de_données:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
[...] LIKE 'myprefix\_%';
Certaines des réponses précédentes étaient très bonnes. J'ai rassemblé leurs idées avec certaines notions d'autres réponses sur le Web.
J'avais besoin de supprimer toutes les tables commençant par 'temp_' Après quelques itérations, j'ai créé ce bloc de code:
J'espère que cela sera utile aux autres programmeurs MySQL / PHP.
la source
copiez les résultats et collez-les dans un éditeur de texte ou affichez la requête dans un fichier, utilisez quelques recherches et remplacements pour supprimer le formatage indésirable et remplacez-les
\n
par une virgule, mettez un;
à la fin et ajoutez une table de dépôt au début.vous obtiendrez quelque chose qui ressemble à ceci:
la source
La solution @ andre-miller est bonne mais il y a encore mieux et un peu plus professionnel qui vous aidera à tout exécuter en une seule fois. Il faudra toujours plus d'une commande, mais cette solution vous permettra d'utiliser le SQL pour les versions automatisées.
Remarque: ce code dépend de la plate-forme, il est pour MySQL mais il est certain qu'il pourrait être implémenté pour Postgre, Oracle et MS SQL avec de légères modifications.
la source
la source
J'ai supprimé la table avec succès en modifiant la requête pour aimer ceci
la source
Vous pouvez le faire en une seule commande avec MySQL:
Vous devrez probablement créer la liste des tables de manière dynamique dans le code.
Une approche alternative serait d'utiliser la bibliothèque de routine à usage général pour MySQL 5.
la source
Je voulais juste publier le SQL exact que j'ai utilisé - c'est en quelque sorte un mélange des 3 principales réponses:
la source
Juste une autre solution utilisant GROUP_CONCAT afin d'exécuter une requête de suppression comme
DROP TABLE table1, table2, ..
la source
J'ai trouvé que les déclarations préparées étaient un peu difficiles à mettre en œuvre pour moi, mais la configuration
GROUP_CONCAT_MAX_LEN
était essentielle lorsque vous avez beaucoup de tables. Cela a abouti à un processus simple en trois étapes avec couper-coller à partir de la ligne de commande mysql qui a très bien fonctionné pour moi:Ensuite, copiez et collez soigneusement la longue instruction DROP résultante .
la source
\G
au lieu de;
donne une sortie un peu plus propre