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.


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ę.


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.


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.


-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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.