DROP TABLE (Italiano)

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 NOTEviene 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 diTEMPORARY 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 diversi DROP 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=INPLACEche 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.

Leave a Comment