Sintassi
DROP TABLE tbl_name ...
Descrizione
DROP TABLE
rimuove una o più tabelle. È necessario disporre del privilegioDROP
per ogni tabella. Tutti i dati della tabella e la definizione della tabella vengono rimossi, così come i trigger associati alla tabella, quindi fai attenzione a questa affermazione! Se una qualsiasi delle tabelle denominate nell’elenco degli argomenti non esiste, MariaDB restituisce un errore che indica per nome quali tabelle non esistentiè stato in grado di eliminare, ma elimina anche tutte le tabelle nell’elenco che doexist.,
Importante: quando una tabella viene eliminata, i privilegi utente sulla tabella non vengono automaticamente eliminati. Vedi GRANT.
Se un altro thread utilizza la tabella in una transazione esplicita o in una transazione autocommit, il thread acquisisce un blocco dei metadati (MDL) sulla tabella. L’istruzioneDROP TABLE
attenderà nello stato del thread “Waiting for table metadata lock” fino al rilascio dell’MDL. Gli MDL vengono rilasciati nei seguenti casi:
- Se un MDL viene acquisito in una transazione esplicita, l’MDL verrà rilasciato al termine della transazione.,
- Se un MDL viene acquisito in una transazione autocommit, l’MDL verrà rilasciato al termine dell’istruzione.
- Le tabelle transazionali e non transazionali vengono gestite allo stesso modo.
Si noti che per una tabella partizionata,DROP TABLE
rimuove permanentemente tabledefinition, tutte le sue partizioni e tutti i dati memorizzati in quelle partizioni. Rimuove anche la definizione di partizionamento (.par) fileassociato alla tabella eliminata.
Per ogni tabella di riferimento,DROP TABLE
elimina una tabella temporanea con quel nome, se esiste., Se non esiste e la parola chiave TEMPORARY
non viene utilizzata, viene eliminata una tabella non temporanea con lo stesso nome, se esiste. La parola chiave TEMPORARY
garantisce che una tabella non temporanea non venga accidentalmente eliminata.
Utilizzare IF EXISTS
per evitare che si verifichi un errore per le tabelle che non esistono. Un NOTE
viene generato per ogni tabella inesistente quando si utilizzaIF EXISTS
. Vedere MOSTRA AVVISI.
Se una chiave esterna fa riferimento a questa tabella, la tabella non può essere eliminata., In questo caso, è necessario rilasciare prima la chiave esterna.
RESTRICT
e CASCADE
possono facilitare il porting da altri sistemi di database. In MariaDB, non fanno nulla.
Il commento prima dei nomi delle tabelle (/*COMMENT TO SAVE*/
) viene memorizzato nel registro binario. Questa funzione può essere utilizzata dagli strumenti di replica per inviare i propri messaggi interni.
È possibile specificare i nomi delle tabelle come db_name
.tab_name
. Ciò è utile per eliminare le tabelle da più database con una sola istruzione., Vedere Identifier Qualificatori per i dettagli.
Il privilegio DROP è necessario per utilizzare DROP TABLE
su tabelle non temporanee. Per le tabelle temporanee, non è richiesto alcun privilegio, poiché tali tabelle sono visibili solo per la sessione corrente.
Nota: DROP TABLE
commette automaticamente la transazione attiva corrente,a meno che non si utilizzi la parola chiave TEMPORARY
.
MariaDB che inizia con 10.5.4
Da MariaDB 10.5.,4,DROP TABLE
elimina in modo affidabile i resti di tabella all’interno di un motore di archiviazione anche se manca il file.frm
. Prima di allora, un file .frm
mancante comporterebbe il fallimento dell’istruzione.
MariaDB che inizia con 10.3.1
WAIT / NOWAIT
Imposta il timeout di attesa del blocco. Vedi ASPETTARE e NOWAIT.
DROP TABLE in replication
DROP TABLE
ha le seguenti caratteristiche nella replica:
-
DROP TABLE SE ESISTE
vengono sempre registrati., -
DROP TABLE
withoutIF EXISTS
for tables that don’t exist are not written to the binary log. - Eliminazione di
TEMPORARY
le tabelle sono precedute nel log daTEMPORARY
. Questi drop vengono registrati solo quando si esegue l’istruzione o la replica in modalità mista., - Uno
DROP TABLE
dichiarazione può essere registrato con un massimo di 3 diversiDROP
istruzioni:DROP TABELLA TEMPORANEA list_of_non_transactional_temporary_tables
DROP TABELLA TEMPORANEA list_of_transactional_temporary_tables
DROP TABLE list_of_normal_tables
A partire da MariaDB 10.0.,8,DROP TABLE
sul master viene trattato sullo slave comeDROP TABLE SE ESISTE
. Puoi cambiarlo impostando slave-ddl-exec-mode suSTRICT
.
Rilasciare un #sql interno-… Tabella
Se il processo mysqld viene ucciso durante una TABELLA ALTER si può trovare una tabella denominata #sql-… nella directory dati. In MariaDB 10.3, le tabelle InnoDB con questo prefisso verranno cancellate automaticamente durante startup.In MariaDB 10.4 faremo in modo che queste tabelle temporanee saranno sempre eliminati automaticamente.,
Se si desidera eliminare esplicitamente una di queste tabelle, è possibile farlo utilizzando la seguente sintassi:
DROP TABLE `#mysql50##sql-...`;
Quando si esegue unaALTER TABLE…ALGORITHM=INPLACE
che ricostruisce la tabella, InnoDB creerà una tabella interna#sql-ib
. Per queste tabelle, il file.frm
verrà chiamato qualcos’altro. Per eliminare tale tabella dopo un crash del server, è necessario rinominare il file#sql*.frm
in modo che corrisponda al file#sql-ib*.ibd
.,
Eliminare tutte le tabelle in un database
Il modo migliore per eliminare tutte le tabelle in un database è eseguendoDROP DATABASE
, che eliminerà il database stesso e tutte le tabelle in esso contenute.
Tuttavia, se si desidera eliminare tutte le tabelle nel database, ma si desidera anche mantenere il database stesso e qualsiasi altro oggetto non tabella al suo interno, è necessario eseguireDROP TABLE
per eliminare ogni singola tabella. È possibile costruire questi comandiDROP TABLE
interrogando la tabellaTABLES
nel databaseinformation_schema
., Ad esempio:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
Esempi
DROP TABLE Employees, Customers;
Note
Attenzione che DROP TABLE
può eliminare sia le tabelle che le sequenze. Questo viene fatto principalmente per consentire a vecchi strumenti come mysqldump di funzionare con le sequenze.
Vedi anche
- CREA TABELLA
- MODIFICA TABELLA
- MOSTRA CREA TABELLA
- SEQUENZA DI RILASCIO
- Variabile slave-ddl-exec-mode.