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 istniejesą zawsze rejestrowane., -
upuść tabelębezjeśli istniejedla tabel, które nie istnieją, nie są zapisywane do dziennika binarnego. - opuszczanie
tymczasowetabele są poprzedzone w dziennikutymczasowe. Te krople są rejestrowane tylko podczas uruchamiania instrukcji lub replikacji w trybie mieszanym., - jedna
DROP TABLEinstrukcja może być rejestrowana z maksymalnie 3 różnymiDROPInstrukcja:DROP TEMPORARY TABLE list_of_non_transactional_temporary_tablesDrop temporary table list_of_transactional_temporary_tablesdrop 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.