Déposez plusieurs tables en un seul coup dans mysql


102

Comment supprimer plusieurs tables d'une seule base de données en une seule commande. quelque chose comme,

> use test; 
> drop table a,b,c;

où a, b, c sont les tables du test de base de données.


17
vous vous répondez déjà
ajreal

selon les réponses ci-dessous, dans HeidiSQL vous pouvez filtrer les tables par leur nom (zone de texte supérieure), écrire DROP TABLE dans une requête et double-cliquer sur chaque table souhaitée pour ajouter son nom à la requête (mettre une virgule entre elles) puis appuyer sur F9 pour l'exécuter. Un peu hors sujet mais je suis venu ici pour ça.
Ivan Ferrer Villa

Pour les personnes souhaitant supprimer plusieurs tables avec le même préfixe, car DROP TABLE table_prefix_*ne fonctionne pas avec le caractère étoile: stackoverflow.com/questions/6758652
...

Réponses:


135

Exemple:

Disons que la table A a deux enfants B et C. Ensuite, nous pouvons utiliser la syntaxe suivante pour supprimer toutes les tables.

DROP TABLE IF EXISTS B,C,A;

Cela peut être placé au début du script au lieu de supprimer individuellement chaque table.


29
Cela vaut peut-être la peine de souligner que les tables n'ont pas du tout besoin de relation. Ils peuvent être complètement indépendants et cette syntaxe fonctionnera toujours.
crmpicco

76
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

Ensuite, vous n'avez pas à vous soucier de les déposer dans le bon ordre, ni de savoir s'ils existent réellement.

NB ceci est pour MySQL uniquement (comme dans la question). D'autres bases de données ont probablement des méthodes différentes pour ce faire.


3
Vous m'avez sauvé de beaucoup de tracas en tournant les contrôles fkey (y).
HungryCoder du

0

Une manière paresseuse de faire cela s'il y a beaucoup de tables à supprimer.

  1. Obtenez le tableau en utilisant le ci-dessous

    • Pour le serveur SQL - SELECT CONCAT (nom, ',') Table_Name FROM SYS.tables;
    • Pour oralce - SELECT CONCAT (TABLE_NAME, ',') FROM SYS.ALL_TABLES;
  2. Copiez et collez les noms de table du jeu de résultats et collez-le après la commande DROP.


-3
declare @sql1 nvarchar(max) 
SELECT @sql1 =
  STUFF(
         (
           select ' drop table dbo.[' + name + ']'

           FROM sys.sysobjects AS sobjects
           WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
           for xml path('')
        ),
     1, 1, '')

  execute sp_executesql @sql1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.