Syntax
DROP TABLE tbl_name ...
popis
DROP TABLE
odstraní jednu nebo více tabulek. Musíte mít DROP
privilegefor každé tabulce. Všechna data tabulky a definice tabulky jsou odstraněny, stejně jako spouštěče spojené s tabulkou, takžepečlivý s tímto Prohlášením! Pokud některý z tabulek uvedených v seznamu argumentů donot existují, MariaDB vrátí chybu označující podle názvu, který neexistující tabulkynemohl klesnout, ale také klesne všechny tabulky v seznamu, který doexist.,
důležité: když je tabulka vynechána, uživatelská oprávnění na stole nejsou automaticky vynechána. Viz GRANT.
pokud jiný podproces používá tabulku v explicitní transakci nebo transakci autocommit, získá vlákno na tabulce zámek metadat (MDL). Příkaz DROP TABLE
bude čekat ve stavu vlákna „čekání na zámek metadat tabulky“, dokud nebude MDL uvolněn. MDL jsou uvolňovány v následujících případech:
- pokud je MDL získán v explicitní transakci, bude MDL uvolněn po ukončení transakce.,
- pokud je MDL získán v transakci autocommit, bude MDL uvolněn po ukončení příkazu.
- transakční a transakční tabulky jsou zpracovány stejně.
Všimněte si, že pro tabulku oddílů, DROP TABLE
trvale odstraňuje tabledefinition, všechny jeho oddíly, a všechna data, která byla uložena kandidátské oddíly. Odstraňuje také definici rozdělení (.par) fileasociated with the drop table.
pro každou odkazovanou tabulkuDROP TABLE
upustí dočasnou tabulku s tímto názvem, pokud existuje., Pokud neexistuje a klíčové slovoTEMPORARY
se nepoužívá, klesne Dočasná tabulka se stejným názvem, pokud existuje. Klíčové slovoTEMPORARY
zajišťuje, že dočasná tabulka nebude náhodně vynechána.
použijte IF EXISTS
, abyste zabránili výskytu chyby u tabulek, které neexistují. NOTE
je generován pro každou neexistující tabulku při použitíIF EXISTS
. Viz zobrazit varování.
Pokud se na tuto tabulku odkazuje cizí klíč, nelze tabulku vynechat., V tomto případě je nutné nejprve vynechat cizí klíč.
RESTRICT
a CASCADE
mohou usnadnit Portování z jiných databázových systémů. V Mariadbu nic nedělají.
komentář před názvy tabulek (/*COMMENT TO SAVE*/
) je uložen v binárním protokolu. Tuto funkci mohou replikační nástroje použít k odesílání interních zpráv.
je možné zadat názvy tabulek jako db_name
.tab_name
. To je užitečné pro odstranění tabulek z více databází s jedním příkazem., Podrobnosti viz identifikátor kvalifikace.
oprávnění DROP je vyžadováno pro použití DROP TABLE
na dočasných tabulkách. U dočasných tabulek není vyžadováno žádné oprávnění, protože tyto tabulky jsou viditelné pouze pro aktuální relaci.
Poznámka: DROP TABLE
automaticky provede aktuální aktivní transakci,pokud nepoužíváte Klíčové slovo TEMPORARY
.
MariaDB počínaje 10.5.4
od MariaDB 10.5.,4, DROP TABLE
spolehlivě odstraní stolu zbytky uvnitř storage engine, i když .frm
chybí soubor. Předtím by chybějící.frm
soubor vedl k selhání příkazu.
MariaDB počínaje 10.3.1
WAIT / NOWAIT
Nastavte časový limit čekání na zámek. Uvidíme, jak to dopadne.
DROP TABLE v replikace
DROP TABLE
má následující vlastnosti replikace:
-
DROP TABLE, POKUD EXISTUJE
jsou vždy zaznamenány., -
DROP TABLE
bezpokud existuje
pro tabulky, které neexistují, nejsou zapsány do binárního protokolu. -
dočasné tabulky
jsou v protokolu předřazeny sdočasné
. Tyto kapky jsou zaznamenány pouze při spuštění příkazu nebo replikaci smíšeného režimu., - one
DROP TABLE
výpis lze zaznamenat až s 3 různýmiDROP
příkazy:DROP Dočasná tabulka list_of_non_transactional_temporary_tables
drop temporary table list_of_transactional_temporary_tables
drop table list_of_normal_tables
od MariaDB 10.0.,8, DROP TABLE
na master je zacházeno na otroka jako DROP TABLE, POKUD EXISTUJE
. Můžete to změnit nastavením režimu slave-ddl-exec na STRICT
.
upuštění interního # sql-… Tabulka
Pokud je proces mysqld zabit během změny tabulky, můžete najít tabulku s názvem #sql-… ve vašem datovém adresáři. V MariaDB 10.3 se tabulky InnoDB s touto předponou automaticky odstraní během startup.In MariaDB 10.4 zajistíme, aby tyto dočasné tabulky byly vždy automaticky smazány.,
Chcete-li jednu z těchto tabulek explicitně smazat, můžete tak učinit pomocí následující syntaxe:
DROP TABLE `#mysql50##sql-...`;
při spuštění ALTER TABLE…ALGORITHM=INPLACE
, která obnoví tabulku, InnoDB vytvoří interní #sql-ib
tabulka. Pro tyto tabulky bude soubor .frm
nazýván něčím jiným. Chcete-li takovou tabulku po selhání serveru vynechat, musíte přejmenovat soubor #sql*.frm
tak, aby odpovídal souboru #sql-ib*.ibd
.,
Vrácení Všech Tabulek v Databázi
nejlepší způsob, jak k poklesu všech tabulek v databázi je vykonáváním DROP DATABASE
, který se bude pokles samotné databáze a všechny tabulky.
Pokud však chcete všechny tabulky v databázi vynechat, ale chcete v ní také zachovat samotnou databázi a jiné objekty, které nejsou tabulkami, musíte provést DROP TABLE
, abyste upustili od každé jednotlivé tabulky. Tyto příkazy DROP TABLE
můžete vytvořit dotazem naTABLES
v databázi information_schema
., Například:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
Příklady
DROP TABLE Employees, Customers;
Poznámky
dávejte si Pozor, aby DROP TABLE
může klesnout obou tabulek a sekvencí. To se provádí hlavně proto, aby staré nástroje, jako je mysqldump, pracovaly se sekvencemi.
Viz také
- vytvořit tabulku
- ALTER TABLE
- zobrazit vytvořit tabulku
- drop SEQUENCE
- variabilní slave-DDL-exec-mode.