składnia
DROP TABLE tbl_name ...
opis
DROP TABLE
usuwa jedną lub więcej tabel. Musisz mieć DROP
Wszystkie dane tabeli i definicja tabeli są usuwane, a także wyzwalacze powiązane z tabelą, więc uważaj na to polecenie! Jeśli którakolwiek z tabel wymienionych na liście argumentów nie istnieje, MariaDB zwraca błąd wskazujący po nazwie, które nieistniejące tablesit nie był w stanie upuścić, ale również zrzuca wszystkie tabele z listy, które nie istnieją.,
ważne: gdy tabela zostanie upuszczona, uprawnienia użytkownika na tabeli nie zostaną automatycznie upuszczone. Patrz na Granta.
Jeśli inny wątek używa tabeli w jawnej transakcji lub transakcji autocommit, wtedy wątek uzyskuje blokadę metadanych (MDL) w tabeli. Instrukcja DROP TABLE
będzie czekać w stanie” Waiting for table metadata lock ” do momentu wydania MDL. MDL są zwalniane w następujących przypadkach:
- Jeśli MDL zostanie nabyty w jawnej transakcji, to MDL zostanie zwolniony po zakończeniu transakcji.,
- Jeśli MDL zostanie nabyty w transakcji autocommit, to MDL zostanie zwolniony po zakończeniu instrukcji.
- tabele transakcyjne i nietransakcyjne są obsługiwane tak samo.
zauważ, że dla podzielonej na partycje tabeli DROP TABLE
trwale usuwa zdefiniowanie tabel, wszystkie jej partycje i wszystkie dane, które były przechowywane w tych partycjach. Usuwa również definicję partycjonowania (.par) fileassocjated with the dropped table.
dla każdej wskazanej tabeli DROP TABLE
usuwa tabelę tymczasową o tej nazwie, jeśli istnieje., Jeśli nie istnieje, a słowo kluczowe TEMPORARY
nie jest używane, to usuwa nie-tymczasową tabelę o tej samej nazwie, jeśli istnieje. Słowo kluczoweTEMPORARY
zapewnia, że nie-tymczasowa tabela nie zostanie przypadkowo upuszczona.
użyj IF EXISTS
, aby zapobiec wystąpieniu błędu dla tabel, które nie występują. ANOTE
jest generowana dla każdej nieistniejącej tabeli przy użyciu IF EXISTS
. Zobacz Pokaż Ostrzeżenia.
Jeśli klucz obcy odwołuje się do tej tabeli, tabeli nie można upuścić., W takim przypadku należy najpierw upuścić klucz obcy.
RESTRICT
ICASCADE
mogą ułatwić przenoszenie z innych systemów baz danych. W MariaDB nic nie robią.
komentarz przed nazwami tabel (/*COMMENT TO SAVE*/
) jest przechowywany w dzienniku binarnym. Ta funkcja może być używana przez narzędzia replikacyjne do wysyłania wewnętrznych wiadomości.
można określić nazwy tabel jakodb_name
.tab_name
. Jest to przydatne do usuwania tabel z wielu baz danych za pomocą jednej instrukcji., Szczegóły można znaleźć w Kwalifikatorach identyfikatorów.
uprawnienie DROP jest wymagane do używaniaDROP TABLE
na nieokresowych tabelach. W przypadku tabel tymczasowych uprawnienia nie są wymagane, ponieważ takie tabele są widoczne tylko dla bieżącej sesji.
Uwaga: DROP TABLE
automatycznie zatwierdza bieżącą aktywną transakcję,chyba że użyjesz słowa kluczowego TEMPORARY
.
MariaDB począwszy od 10.5.4
od MariaDB 10.5.,4, DROP TABLE
niezawodnie usuwa pozostałości tabeli wewnątrz silnika pamięci, nawet jeśli brakuje pliku .frm
. Wcześniej brakujący plik.frm
spowodowałby niepowodzenie instrukcji.
MariaDB począwszy od 10.3.1
WAIT/NOWAIT
ustawia limit czasu oczekiwania blokady. Zobacz też
upuść tabelę w replikacji
DROP TABLE
ma następujące cechy w replikacji:
-
upuść tabelę, jeśli istnieje
są zawsze rejestrowane., -
upuść tabelę
bezjeśli istnieje
dla tabel, które nie istnieją, nie są zapisywane do dziennika binarnego. - opuszczanie
tymczasowe
tabele są poprzedzone w dziennikutymczasowe
. Te krople są rejestrowane tylko podczas uruchamiania instrukcji lub replikacji w trybie mieszanym., - jedna
DROP TABLE
instrukcja może być rejestrowana z maksymalnie 3 różnymiDROP
Instrukcja:DROP TEMPORARY TABLE list_of_non_transactional_temporary_tables
Drop temporary table list_of_transactional_temporary_tables
drop table list_of_normal_tables
zaczynając od MariaDB 10.0.,8, upuść tabelę
NA master jest traktowany na slave jako upuść tabelę, jeśli istnieje
. Możesz to zmienić, ustawiając slave-DDL-Exec-mode na STRICT
.
upuszczanie wewnętrznego # sql-… Tabela
Jeśli proces mysqld zostanie zabity podczas zmiany tabeli, możesz znaleźć tabelę o nazwie #sql-… w katalogu danych. W MariaDB 10.3 tabele InnoDB z tym prefiksem zostaną automatycznie usunięte podczas startup.In MariaDB 10.4 zapewniamy, że te tymczasowe tabele będą zawsze usuwane automatycznie.,
Jeśli chcesz wyraźnie usunąć jedną z tych tabel, możesz to zrobić używając następującej składni:
DROP TABLE `#mysql50##sql-...`;
podczas uruchamiania tabeliALTER TABLE…ALGORITHM=INPLACE
, która przebudowuje tabelę, InnoDB utworzy wewnętrzną tabelę#sql-ib
. Dla tych tabel plik .frm
będzie nazywany czymś innym. Aby upuścić taką tabelę po awarii serwera, musisz zmienić nazwę pliku #sql*.frm
, aby pasował do pliku #sql-ib*.ibd
.,
upuszczenie wszystkich tabel w bazie danych
najlepszym sposobem na upuszczenie wszystkich tabel w bazie danych jest wykonanieDROP DATABASE
, co spowoduje upuszczenie samej bazy danych i wszystkich tabel w niej.
Jeśli jednak chcesz upuścić wszystkie tabele do bazy danych, ale chcesz również zachować samą bazę danych i wszystkie inne obiekty spoza tabeli w niej, musisz wykonać DROP TABLE
, aby upuścić każdą pojedynczą tabelę. Możesz utworzyć te polecenia DROP TABLE
poprzez zapytanie do tabeli TABLES
w bazie danych information_schema
., Na przykład:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
przykłady
DROP TABLE Employees, Customers;
uwagi
uważaj, że DROP TABLE
może upuszczać zarówno tabele, jak i sekwencje. Odbywa się to głównie po to, aby stare narzędzia, takie jak mysqldump, mogły pracować z sekwencjami.
patrz również
- Utwórz tabelę
- Zmień tabelę
- Pokaż Utwórz tabelę
- Sekwencja kropli
- zmienna slave-DDL-exec-mode.