Syntax
DROP TABLE tbl_name ...
Description
DROP TABLE
tar bort en eller flera tabeller. Du måste ha behörigheten DROP
för varje tabell. Alla tabelldata och tabelldefinitionen tas bort, liksom utlösare associerade till tabellen, så varaförsiktigt med detta uttalande! Om någon av tabellerna som namnges i argumentlistan inte finns, returnerar MariaDB ett fel som anger med namn vilka icke-befintliga tabellerdet inte kunde släppa, men det släpper också alla tabeller i listan som doexist.,
viktigt: när en tabell tas bort släpps inte användarbehörigheterna i tabellen automatiskt. Se BIDRAGET.
om en annan tråd använder tabellen i en explicit transaktion eller en autocommit-transaktion, förvärvar tråden ett metadatalås (MDL) på tabellen. DROP TABLE
– satsen väntar i gängläget ”Waiting for table metadata lock” tills MDL släpps. MDLs släpps i följande fall:
- om en MDL förvärvas i en explicit transaktion, kommer MDL att släppas när transaktionen slutar.,
- om en MDL förvärvas i en autocommit-transaktion, kommer MDL att släppas när uttalandet slutar.
- transaktions-och icke-transaktionstabeller hanteras på samma sätt.
Observera att för en partitionerad tabell tar DROP TABLE
permanent bort tabelldefinitionen, alla dess partitioner och alla data som lagrades idessa partitioner. Det tar också bort partitioneringsdefinitionen (.par) fileassociated med det tappade bordet.
för varje refererad tabell,DROP TABLE
droppar en tillfällig tabell med det namnet, om det finns., Om det inte finns, och nyckelordet TEMPORARY
inte används, faller det en icke-tillfällig tabell med samma namn, om det finns. NyckelordetTEMPORARY
säkerställer att en icke-tillfällig tabell inte kommer att släppas av misstag.
användIF EXISTS
för att förhindra att ett fel uppstår för tabeller som inte existerar. ANOTE
genereras för varje icke-existerande tabell när du använderIF EXISTS
. Se VISA VARNINGAR.
om en utländsk nyckel refererar till den här tabellen kan inte tabellen släppas., I det här fallet är det nödvändigt att släppa den utländska nyckeln först.
RESTRICT
ochCASCADE
får göra Portering från andra databassystem enklare. I MariaDB gör de ingenting.
kommentaren före tabellnamnen (/*COMMENT TO SAVE*/
) lagras i binärloggen. Den funktionen kan användas av replikeringsverktyg för att skicka sina interna meddelanden.
det är möjligt att ange tabellnamn somdb_name
.tab_name
. Detta är användbart för att ta bort tabeller från flera databaser med ett uttalande., Mer information finns i Identifikationskvalifikationer.
DROP-behörigheten krävs för att användaDROP TABLE
I icke-temporära tabeller. För temporära tabeller krävs inga privilegier, eftersom sådana tabeller endast är synliga för den aktuella sessionen.
notera: DROP TABLE
utför automatiskt den aktuella aktiva transaktionen,såvida du inte använder nyckelordet TEMPORARY
.
MariaDB börjar med 10.5.4
Från MariaDB 10.5.,4, DROP TABLE
raderar på ett tillförlitligt sätt tabellrester i en lagringsmotor även om filen.frm
saknas. Innan dess skulle en .frm
– fil som saknas resultera i att uttalandet misslyckas.
MariaDB börjar med 10.3.1
vänta/NOWAIT
Ställ in låset vänta timeout. Se vänta och NOWAIT.
DROP TABLE in replication
DROP TABLE
har följande egenskaper i replikering:
-
DROP TABLE IF EXISTS
loggas alltid., -
DROP TABLE
withoutIF EXISTS
for tables that don ’ t exist are not written to the binary log. - släppa av
tillfälliga
tabeller prefixeras i loggen medtillfällig
. Dessa droppar loggas endast när du kör statement eller mixed mode replication., - en
DROP TABLE
statement kan loggas med upp till 3 olikaDROP
statements:släpp temporär tabell list_of_non_transactional_temporary_tables
släpp temporär tabell list_of_non_transactional_temporary_tables
släpp tillfällig tabell list_of_transactional_temporary_tables
-
släpp tabell list_of_normal_tables
från MariaDB 10.0.,8,DROP TABLE
på master behandlas på slaven somDROP TABLE IF EXISTS
. Du kan ändra det genom att ställa in slave-DDL-exec-mode till STRICT
.
släppa en intern #sql-… Tabell
Om mysqld processen dödas under ett ALTER TABLE du kan hitta en tabell som heter #sql-… i din datakatalog. I MariaDB 10.3 kommer InnoDB-tabeller med detta prefix att raderas automatiskt under startup.In MariaDB 10.4 vi kommer att se till att dessa tillfälliga tabeller alltid raderas automatiskt.,
om du vill ta bort en av dessa tabeller uttryckligen kan du göra det genom att använda följande syntax:
DROP TABLE `#mysql50##sql-...`;
När du kör en ALTER TABLE…ALGORITHM=INPLACE
som bygger om tabellen, kommer InnoDB att skapa en intern #sql-ib
tabell. För dessa tabeller kommer filen .frm
att kallas något annat. För att släppa en sådan tabell efter en serverkrasch måste du byta namn på filen#sql*.frm
för att matcha filen#sql-ib*.ibd
.,
släppa alla tabeller i en databas
det bästa sättet att släppa alla tabeller i en databas är genom att köra DROP DATABASE
, som kommer att släppa databasen själv, och alla tabeller i den.
men om du vill släppa alla tabeller i databasen, men du också vill behålla databasen själv och andra icke-tabellobjekt i den, måste du köra DROP TABLE
för att släppa varje enskild tabell. Du kan konstruera dessa DROP TABLE
– kommandon genom att fråga TABLES
– tabellen i information_schema
– databasen., Till exempel:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
exempel
DROP TABLE Employees, Customers;
anmärkningar
se upp att DROP TABLE
kan släppa både tabeller och sekvenser. Detta görs främst för att tillåta gamla verktyg som mysqldump att arbeta med sekvenser.
Se även
- Skapa tabell
- ändra tabell
- visa Skapa tabell
- släpp sekvens
- variabel Slav-DDL-exec-läge.