Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL TRUNCATE TABLE anhand praktischer Beispiele verstehen

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:

  1. 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.
  2. TRUNCATE TABLE umgeht die DELETE-Trigger, um eine hohe Leistung zu erzielen.
  3. TRUNCATE TABLE kann nicht rückgängig gemacht werden, da dies ein implizites Commit verursacht.
  4. 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.
  5. Es setzt die AUTO_INCREAMENT-Spaltenwerte auf den Startwert zurück.
  6. Die TRUNCATE TABLE-Anweisung schlägt fehl, wenn Sie Fremdschlüssel für InnoDB- oder NDB-Tabellen erstellt haben.
  7. 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.
  8. Die TRUNCATE TABLE-Anweisung behält die Partitionierung bei. Die Indexdateien und -daten werden gelöscht, aber die Partitionsdefinition wird nicht beeinflusst.
  9. Sie können eine beschädigte InnoDB-Tabelle kürzen.
  10. Wenn Sie Datei-pro-Tabelle-Tablespace verwenden, löscht die TRUNCATE TABLE-Anweisung den Tablespace und erstellt einen neuen.
  11. 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.