MySQL :: MySQL 8.0 Reference Manual :: 13.1.37 TRUNCATE TABLE Statement (Italiano)

13.1.37 TRUNCATE TABLE Statement

TRUNCATE tbl_name

TRUNCATE TABLE empties a table completely. It requires the DROP privilege. Logically, TRUNCATE TABLE is similar to a DELETE statement that deletes all rows, or a sequence of DROP TABLE and CREATE TABLE statements.,

Per ottenere prestazioni elevate, TRUNCATE TABLE ignora il metodo DML di eliminazione dei dati. Pertanto, non causa l’attivazione dei trigger ON DELETE, non può essere eseguita per le tabelle InnoDB con relazioni di chiavi esterne padre-figlio e non può essere ripristinata come un’operazione DML. Tuttavia,TRUNCATE TABLE le operazioni sulle tabelle che utilizzano un motore di archiviazione supportato da DDL atomico vengono eseguite completamente o ripristinate se il server si arresta durante il funzionamento. Per ulteriori informazioni, vedere Paragrafo 13.1.,1, “Supporto dichiarazione definizione dati atomici”.

Sebbene TRUNCATE TABLE sia simile a DELETE, è classificato come istruzione DDL anziché come istruzione DML. Si differenzia daDELETE nei seguenti modi:

  • Le operazioni di troncamento rilasciano e ricreano la tabella, che è molto più veloce dell’eliminazione di righe una per una, in particolare per le tabelle di grandi dimensioni.

  • Le operazioni troncate causano un commit implicito e quindi non possono essere ripristinate. Vedere Paragrafo 13.3.,3, “Dichiarazioni che causano un commit implicito””

  • Le operazioni di troncamento non possono essere eseguite se la sessione contiene un blocco tabella attivo.

  • TRUNCATE TABLEfallisce per una tabella InnoDBo NDBse ci sono vincoli FOREIGN KEY da altre tabelle che fanno riferimento alla tabella. Sono consentiti vincoli di chiave esterna tra colonne della stessa tabella.

  • Le operazioni di troncamento non restituiscono un valore significativo per il numero di righe eliminate., Il solito risultato è “0 righe interessate”, che dovrebbe essere interpretato come ” nessuna informazione.”

  • Finché la definizione della tabella è valida, la tabella può essere ricreata come una tabella vuota conTRUNCATE TABLE, anche se i dati o i file di indice sono danneggiati.

  • Qualsiasi AUTO_INCREMENT valore viene ripristinato al suo valore iniziale. Questo è vero anche per MyISAM e InnoDB, che normalmente non riutilizzano i valori di sequenza.,

  • Quando viene utilizzato con tabelle partizionate, TRUNCATE TABLE conserva il partizionamento; cioè, i file di dati e indice vengono eliminati e ricreati, mentre le definizioni delle partizioni non vengono influenzate.

  • L’istruzione TRUNCATE TABLEnon richiama i trigger ON DELETE.

  • È supportato il troncamento di una tabellaInnoDB corrotta.

TRUNCATE TABLEper una tabella chiude tutti i gestori per la tabella che sono stati aperti conHANDLER OPEN.,

TRUNCATE TABLE viene trattato ai fini della registrazione binaria e della replica come DROP TABLEseguito da CREATE TABLE —cioè come DDL anziché DML. Questo è dovuto al fatto che, quando si utilizza InnoDB e transazionale motori di archiviazione in cui il livello di isolamento della transazione non permettere un’istruzione di base di registrazione (READ COMMITTED o READ UNCOMMITTED), l’istruzione non è stato registrato e replicato quando si utilizza STATEMENT o MIXED modalità di registrazione., (Bug # 36763) Tuttavia, è ancora applicato sulle repliche usando InnoDB nel modo descritto in precedenza.

In MySQL 5.7 e versioni precedenti, su un sistema con un pool di buffer di grandi dimensioni einnodb_adaptive_hash_index abilitato, un’operazioneTRUNCATE TABLE potrebbe causare un calo temporaneo delle prestazioni del sistema a causa di una scansione LRU avvenuta durante la rimozione delle voci dell’indice hash adattivo della tabella (Bug #68184). La rimappatura diTRUNCATE TABLE aDROP TABLE eCREATE TABLE in MySQL 8.0 evita la problematica scansione LRU.,

TRUNCATE TABLE può essere utilizzato con tabelle di riepilogo dello schema delle prestazioni, ma l’effetto è quello di ripristinare le colonne di riepilogo a 0 o NULL, non per rimuovere le righe. Vedere la sezione 27.12.18, “Tabelle di riepilogo dello schema delle prestazioni”.

Troncando una tabellaInnoDB che risiede in un tablespace file-per-table viene eliminato lo tablespace esistente e ne viene creato uno nuovo. A partire da MySQL 8.0.,21, se il tablespace è stato creato con una versione precedente e risiede in una directory sconosciuta, InnoDB crea il nuovo tablespace nella posizione predefinita e scrive il seguente avviso nel registro degli errori: il percorso della DIRECTORY dei DATI deve essere in una directory nota. La posizione della DIRECTORY dei DATI verrà ignorata e il file verrà inserito nella posizione predefinita di datadir. Le directory note sono quelle definite dalle variabilidatadir,innodb_data_home_dir einnodb_directories., Per avereTRUNCATE TABLE creare il tablespace nella sua posizione corrente, aggiungere la directory all’impostazioneinnodb_directories prima di eseguireTRUNCATE TABLE.

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *