Die MySQL TRUNCATE TABLE-Anweisung ist eine DDL-Anweisung, die zum Entfernen aller Datensätze aus der MySQL-Tabelle verwendet wird. Wenn wir diesen Befehl ausführen, löscht er zuerst die vorhandene Tabelle und erstellt dann eine neue Tabelle unter Verwendung der Tabellendefinition. Die Abfrageausführungssequenz des TRUNCATE TABLE-Befehls ist DROP TABLE und CREATE TABLE.
Die Merkmale der TRUNCATE TABLE-Anweisung sind wie folgt:
- Wenn wir die TRUNCATE TABLE-Anweisung ausführen, anstatt Zeilen zu löschen, löscht MySQL die Tabelle und erstellt sie neu. Es ist schneller als die DELETE-Anweisung, insbesondere bei großen Tabellen.
- TRUNCATE TABLE umgeht die DELETE-Trigger, um eine hohe Leistung zu erzielen.
- TRUNCATE TABLE kann nicht rückgängig gemacht werden, da dies ein implizites Commit verursacht.
- Wenn Sie atomare DDL-unterstützte Speicher-Engines verwenden und der Server während der TRUNCATE TABLE-Operationen anhält, werden die Transaktionen vollständig festgeschrieben oder zurückgesetzt.
- Es setzt die AUTO_INCREAMENT-Spaltenwerte auf den Startwert zurück.
- Die TRUNCATE TABLE-Anweisung schlägt fehl, wenn Sie Fremdschlüssel für InnoDB- oder NDB-Tabellen erstellt haben.
- Auch wenn die Tabelle oder der Index beschädigt ist und die Tabellendefinition gültig ist, erstellt die TRUNCATE TABLE-Anweisung eine leere Tabelle neu.
- Die TRUNCATE TABLE-Anweisung behält die Partitionierung bei. Die Indexdateien und -daten werden gelöscht, aber die Partitionsdefinition wird nicht beeinflusst.
- Sie können eine beschädigte InnoDB-Tabelle kürzen.
- Wenn Sie Datei-pro-Tabelle-Tablespace verwenden, löscht die TRUNCATE TABLE-Anweisung den Tablespace und erstellt einen neuen.
- Wir können TRUNCATE TABLE in Leistungsschema-Zusammenfassungstabellen verwenden, aber es löscht nicht die Daten der Tabellen. Es setzt die Werte der Zusammenfassungsspalte auf NULL oder Null (0) zurück.
Unterschiede zwischen DELETE- und TRUNCATE-Tabellenanweisungen
Sr. | DELETE-Anweisung | TRUNCATE TABLE-Anweisung |
1 | DELETE-Anweisung ist eine DML-Anweisung. Die Änderungen werden in den Binärprotokollen der Datenbank protokolliert. | TRUNCATE TABLE-Anweisung ist eine DDL-Anweisung. Der Vorgang wird nicht in den Binärprotokollen protokolliert. |
2 | Der Vorgang kann rückgängig gemacht werden. | Dieser Vorgang kann nicht rückgängig gemacht werden. |
3 | Es ist langsamer, da Änderungen in den Binärprotokollen protokolliert werden und DML-Trigger ausgeführt werden. | Es ist schneller, weil es die vorhandene Tabelle löscht und eine neue erstellt. |
4 | DELETE-Anweisung erwirbt die Sperre auf Zeilenebene. | TRUNCATE TABLE sperrt die Datenseiten, bevor die Daten entfernt werden. |
5 | Sie können bestimmte Datensätze entfernen, indem Sie die WHERE-Klausel verwenden | Tabelle kürzen entfernt alle Daten aus der Tabelle. |
Die Verwendung der TRUNCATE TABLE-Anweisung in der Praxis
Die Syntax der Truncate Table-Anweisung lautet wie folgt:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Hinweis:Der Name der Tabelle, aus der Sie den Datensatz löschen möchten, steht nach TRUNCATE TABLE Erklärung. Angenommen, Sie möchten tblStudent abschneiden Tisch. Die Abfrage sollte wie folgt lauten:
TRUNCATE TABLE tblStudent
Für die Demonstration habe ich MySQL 8.0 Server installiert und eine Datenbank namens studentsDB erstellt . Dort habe ich die Tabellen namens tblStudent erstellt , tblSchool, und tblStudentCounsiler.
Das folgende Skript erstellt die Datenbank und die Tabellen:
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;
Ich habe einen Fremdschlüssel auf dem tblStudent erstellt Tabelle, die auf die SchoolID verweist Spalte von tblStudent Tabelle.
Das Skript zum Erstellen eines Fremdschlüssels lautet wie folgt:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
Das ER-Diagramm ist unten:
Das folgende Skript fügt die summierten Daten in alle Tabellen ein:
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');
Lassen Sie uns nun die Anwendungsfälle verstehen.
Lassen Sie uns zuerst den tblStudentCounsiler kürzen mit der folgenden Abfrage:
mysql> truncate table studentdb.tblStudentCounsiler;
Die Ausgabe :
Query OK, 0 rows affected (0.08 sec)
Führen Sie die SELECT-Anweisung aus, um die Daten anzuzeigen:
mysql> select * from studentdb.tblStudentCounsiler;
Abfrageausgabe:
Empty set (0.01 sec)
Wie Sie im obigen Screenshot sehen können, wurde der Befehl erfolgreich ausgeführt.
Lassen Sie uns nun versuchen, die tblSchool zu kürzen Tabelle mit der folgenden Abfrage:
mysql> Truncate table tblSchool;
Der folgende Fehler tritt auf, weil wir eine Tabelle, auf die von einer anderen Tabelle verwiesen wird, nicht abschneiden können:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
Um diesen Fehler zu beheben, müssen wir den Fremdschlüssel löschen. Führen Sie dazu die folgende Abfrage aus:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Abfrageausgabe:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
Führen Sie nach dem Löschen des Fremdschlüssels den Befehl zum Abschneiden der Tabelle aus:
mysql> Truncate table tblSchool;
Abfrageausgabe:
Query OK, 0 rows affected (0.08 sec)
Zusammenfassung
Der aktuelle Artikel stellte die TRUNCATE TABLE-Anweisung und ihre Eigenschaften vor. Wir haben uns mit den Unterschieden zwischen TRUNCATE TABLE und den DELETE-Befehlen vertraut gemacht und einige praktische Beispiele untersucht, um die Konzepte zu verdeutlichen.