Mysql
 sql >> Database >  >> RDS >> Mysql

Comprensione di MySQL TRUNCATE TABLE con esempi pratici

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:

  1. 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.
  2. TRUNCATE TABLE ignora i trigger DELETE per ottenere prestazioni elevate.
  3. Non è possibile eseguire il rollback di TRUNCATE TABLE perché provoca un commit implicito.
  4. 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.
  5. Reimposta i valori delle colonne AUTO_INCREAMENT al valore iniziale.
  6. L'istruzione TRUNCATE TABLE non riesce se hai creato chiavi esterne su tabelle InnoDB o NDB.
  7. Anche se la tabella o l'indice sono danneggiati e la definizione della tabella è valida, l'istruzione TRUNCATE TABLE ricrea una tabella vuota.
  8. L'istruzione TRUNCATE TABLE conserva il partizionamento. I file e i dati dell'indice verranno eliminati, ma la definizione della partizione non verrà influenzata.
  9. Puoi troncare una tabella InnoDB danneggiata.
  10. Se stai utilizzando il tablespace file per tabella, l'istruzione TRUNCATE TABLE elimina il tablespace e ne crea uno nuovo.
  11. 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.