Удалите несколько таблиц одним выстрелом в 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 (как в вопросе). В других базах данных, вероятно, есть другие методы для этого.


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.