L'istruzione MySQL TRUNCATE TABLE è un'istruzione DDL utilizzata per rimuovere tutti i record dalla tabella MySQL. Quando eseguiamo questo comando, elimina prima la tabella esistente e quindi crea una nuova tabella utilizzando la definizione della tabella. La sequenza di esecuzione della query del comando TRUNCATE TABLE è DROP TABLE e CREATE TABLE.
Le caratteristiche dell'istruzione TRUNCATE TABLE sono le seguenti:
- Quando eseguiamo l'istruzione TRUNCATE TABLE invece di eliminare le righe, MySQL elimina la tabella e la ricrea. È più veloce dell'istruzione DELETE, in particolare per le tabelle di grandi dimensioni.
- TRUNCATE TABLE ignora i trigger DELETE per ottenere prestazioni elevate.
- Non è possibile eseguire il rollback di TRUNCATE TABLE perché provoca un commit implicito.
- Se si utilizzano motori di archiviazione supportati da DDL atomici e il server si arresta durante le operazioni TRUNCATE TABLE, le transazioni verranno completamente salvate o ripristinate.
- Reimposta i valori delle colonne AUTO_INCREAMENT al valore iniziale.
- L'istruzione TRUNCATE TABLE non riesce se hai creato chiavi esterne su tabelle InnoDB o NDB.
- Anche se la tabella o l'indice sono danneggiati e la definizione della tabella è valida, l'istruzione TRUNCATE TABLE ricrea una tabella vuota.
- L'istruzione TRUNCATE TABLE conserva il partizionamento. I file e i dati dell'indice verranno eliminati, ma la definizione della partizione non verrà influenzata.
- Puoi troncare una tabella InnoDB danneggiata.
- Se stai utilizzando il tablespace file per tabella, l'istruzione TRUNCATE TABLE elimina il tablespace e ne crea uno nuovo.
- Possiamo utilizzare TRUNCATE TABLE nelle tabelle di riepilogo dello schema delle prestazioni, ma non elimina i dati delle tabelle. Reimposta i valori della colonna di riepilogo su NULL o Zero (0).
Differenze tra le istruzioni della tabella DELETE e TRUNCATE
Sr. | Dichiarazione DELETE | Dichiarazione TRUNCATE TABLE |
1 | L'istruzione DELETE è un'istruzione DML. Le modifiche vengono registrate nei registri binari del database. | L'istruzione TRUNCATE TABLE è un'istruzione DDL. L'operazione non è registrata nei log binari. |
2 | È possibile annullare l'operazione. | Questa operazione non può essere annullata. |
3 | È più lento perché le modifiche vengono registrate nei log binari, i trigger DML vengono eseguiti. | È più veloce perché elimina la tabella esistente e ne crea una nuova. |
4 | L'istruzione DELETE acquisisce il blocco a livello di riga. | TRUNCATE TABLE blocca le pagine di dati prima di rimuovere i dati. |
5 | Puoi rimuovere record specifici utilizzando la clausola WHERE | Tronca tabella rimuove tutti i dati dalla tabella. |
Utilizzo della dichiarazione TRUNCATE TABLE nella pratica
La sintassi dell'istruzione Troncate Table è la seguente:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Nota:il nome della tabella da cui desideri eliminare il record è dopo TRUNCATE TABLE dichiarazione. Supponiamo di voler troncare il tblStudent tavolo. La query dovrebbe essere la seguente:
TRUNCATE TABLE tblStudent
Per la dimostrazione, ho installato MySQL 8.0 Server e creato un database chiamato studentsDB . Lì ho creato le tabelle denominate tblStudent , tblSchool, e tblStudentCounsiler.
Il seguente script crea il database e le tabelle:
Create database studentDB;
CREATE TABLE studentDB.tblstudent (
studentID integer NOT NULL AUTO_INCREMENT,
StudentName varchar(255) DEFAULT NULL,
StudentGrade char(1) DEFAULT NULL,
SchoolID int,
PRIMARY KEY (studentID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblschool (
SchoolID int NOT NULL AUTO_INCREMENT,
SchoolName varchar(255) DEFAULT '',
City varchar(255) DEFAULT '',
PRIMARY KEY (SchoolID)
)
ENGINE = INNODB;
CREATE TABLE studentDB.tblStudentCounsiler (
CounsilerID int NOT NULL AUTO_INCREMENT,
CounsilerName varchar(255) DEFAULT '',
PRIMARY KEY (CounsilerID)
)
ENGINE = INNODB;
Ho creato una chiave esterna su tblStudent tabella che fa riferimento a SchoolID colonna del tblStudent tabella.
Lo script per creare una chiave esterna è il seguente:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
Il diagramma ER è di seguito:
Il seguente script inserisce i dati sommati in tutte le tabelle:
Use studentDB;
insert INTO tblSchool(SchoolName,City) VALUES ('Nalanda School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Sarvajanik School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Diwan Ballubhai','Ahmedabad');
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nisarg Upadhyay','A',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nirali Upadhyay','A',2);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Manushi Upadhyay','C',3);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Dixit Upadhyay','B',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Bharti Upadhyay','A',1);
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Raghav Dave');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Keyur Dalwadi');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Sawan Panchal');
Ora cerchiamo di capire i casi d'uso.
Innanzitutto, tronchiamo il tblStudentCounsiler con la seguente query:
mysql> truncate table studentdb.tblStudentCounsiler;
L'output :
Query OK, 0 rows affected (0.08 sec)
Eseguire l'istruzione SELECT per visualizzare i dati:
mysql> select * from studentdb.tblStudentCounsiler;
Risultato della query:
Empty set (0.01 sec)
Come puoi vedere nello screenshot sopra, il comando è stato eseguito correttamente.
Ora, proviamo a troncare la tblSchool tabella con la seguente query:
mysql> Truncate table tblSchool;
Il seguente errore si verifica perché non è possibile troncare una tabella a cui fa riferimento un'altra tabella:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
Per correggere questo errore, dobbiamo eliminare la chiave esterna. Esegui la seguente query per farlo:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Risultato della query:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
Una volta rilasciata la chiave esterna, esegui il comando tronca tabella:
mysql> Truncate table tblSchool;
Risultato della query:
Query OK, 0 rows affected (0.08 sec)
Riepilogo
L'articolo corrente ha introdotto l'istruzione TRUNCATE TABLE e le sue caratteristiche. Abbiamo acquisito familiarità con le differenze tra TRUNCATE TABLE e i comandi DELETE, oltre a esplorare alcuni esempi pratici per chiarire i concetti.