Usuń wiele tabel za jednym razem w mysql

103

Jak usunąć wiele tabel z jednej bazy danych za pomocą jednego polecenia. coś jak,

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

gdzie a, b, c to tabele z testu bazy danych.

Krunal
źródło
17
odpowiadasz już sobie
ajreal
zgodnie z odpowiedziami poniżej, w HeidiSQL możesz filtrować tabele według ich nazwy (górne pole tekstowe), wpisywać DROP TABLE do zapytania i dwukrotnie klikać każdą żądaną tabelę, aby dodać jej nazwę do zapytania (wstaw przecinek), a następnie nacisnąć klawisz F9, aby wykonać. Trochę nie na temat, ale przyszedłem tu po to.
Ivan Ferrer Villa
Dla osób, które chcą upuścić kilka tabel z tym samym prefiksem, ponieważ DROP TABLE table_prefix_*nie działa ze znakiem gwiazdy: stackoverflow.com/questions/6758652/ ...
baptx

Odpowiedzi:

136

Przykład:

Powiedzmy, że tabela A ma dwoje dzieci B i C. Następnie możemy użyć następującej składni, aby usunąć wszystkie tabele.

DROP TABLE IF EXISTS B,C,A;

Można to umieścić na początku skryptu zamiast osobno usuwać każdą tabelę.

Leniel Maccaferri
źródło
29
Może warto zwrócić uwagę, że stoły w ogóle nie muszą mieć żadnego związku. Mogą być całkowicie niezależne i taka składnia będzie nadal działać.
crmpicco,
77
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

Wtedy nie musisz się martwić o to, że upuścisz je w odpowiedniej kolejności, ani o to, czy faktycznie istnieją.

Uwaga: dotyczy to tylko MySQL (jak w pytaniu). Inne bazy danych prawdopodobnie mają do tego różne metody.

OrangeDog
źródło
3
Uratowałeś mnie przed wieloma kłopotami, wyłączając testy Fkey (y).
HungryCoder,
0

Leniwy sposób na zrobienie tego, jeśli jest dużo tabel do usunięcia.

  1. Pobierz tabelę, korzystając z poniższego

    • Dla serwera sql - SELECT CONCAT (nazwa, ',') nazwa_tabeli FROM SYS.tables;
    • Do ustnej - SELECT CONCAT (TABLE_NAME, „,”) FROM SYS.ALL_TABLES;
  2. Skopiuj i wklej nazwy tabel ze zbioru wyników i wklej je po poleceniu DROP.

Javaughn Jackson
źródło
-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
źródło