Удалите несколько таблиц одним выстрелом в mysql

103

Как удалить несколько таблиц из одной базы данных одной командой. что-то вроде,

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

где a, b, c - таблицы из теста базы данных.

Крунал
источник
17
ты уже сам себе отвечаешь
аджреал 07
Согласно приведенным ниже ответам, в HeidiSQL вы можете фильтровать таблицы по их имени (верхнее текстовое поле), писать DROP TABLE в запрос и дважды щелкать каждую желаемую таблицу, чтобы добавить ее имя в запрос (поставьте между ними запятую), затем нажмите F9 для выполнения. Немного не по теме, но я пришел сюда для этого.
Иван Феррер Вилла
Для людей, которые хотят удалить несколько таблиц с одним и тем же префиксом, поскольку DROP TABLE table_prefix_*не работает с символом звезды: stackoverflow.com/questions/6758652/…
baptx

Ответы:

136

Пример:

Допустим, у таблицы A есть два дочерних элемента B и C. Затем мы можем использовать следующий синтаксис для удаления всех таблиц.

DROP TABLE IF EXISTS B,C,A;

Его можно поместить в начало скрипта вместо того, чтобы отдельно отбрасывать каждую таблицу.

Лениэль Маккаферри
источник
29
Возможно, стоит отметить, что таблицы вообще не должны иметь никаких отношений. Они могут быть полностью независимыми, и этот синтаксис все равно будет работать.
crmpicco
77
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

Тогда вам не нужно беспокоиться о том, чтобы их сбросить в правильном порядке или о том, существуют ли они на самом деле.

NB это только для MySQL (как в вопросе). В других базах данных, вероятно, есть другие методы для этого.

OrangeDog
источник
3
Вы избавили меня от лишних хлопот, отключив чеки f (y).
HungryCoder
0

Ленивый способ сделать это, если нужно удалить много таблиц.

  1. Получите таблицу, используя приведенную ниже

    • Для сервера sql - ВЫБРАТЬ CONCAT (имя, ',') Имя_таблицы FROM SYS.tables;
    • Для устного - SELECT CONCAT (TABLE_NAME, ',') FROM SYS.ALL_TABLES;
  2. Скопируйте и вставьте имена таблиц из набора результатов и вставьте его после команды 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
user4774666
источник