MySQL TRUNCATE TABLE-sætning er en DDL-sætning, der bruges til at fjerne alle poster fra MySQL-tabellen. Når vi kører denne kommando, taber den den eksisterende tabel først og opretter derefter en ny tabel ved hjælp af tabeldefinitionen. Forespørgselsudførelsessekvensen for TRUNCATE TABLE-kommandoen er DROP TABLE og CREATE TABLE.
Karakteristikaene for TRUNCATE TABLE-sætningen er som følger:
- Når vi kører TRUNCATE TABLE-sætningen i stedet for at slette rækker, dropper MySQL tabellen og genopretter den. Det er hurtigere end DELETE-sætningen, især for store tabeller.
- TRUNCATE TABLE omgår DELETE-triggerne for at opnå høj ydeevne.
- TRUNCATE TABLE kan ikke rulles tilbage, fordi det forårsager en implicit commit.
- Hvis du bruger atomare DDL-understøttede lagringsmotorer, og serveren stopper under TRUNCATE TABLE-operationerne, vil transaktionerne blive fuldt ud forpligtet eller rullet tilbage.
- Den nulstiller AUTO_INCREAMENT-kolonnernes værdier til startværdien.
- TRUNCATE TABLE-sætningen mislykkes, hvis du har oprettet fremmednøgler på InnoDB- eller NDB-tabeller.
- Selvom tabellen eller indekset er beskadiget, og tabeldefinitionen er gyldig, genskaber TRUNCATE TABLE-sætningen en tom tabel.
- TRUNCATE TABLE-sætningen bevarer partitionering. Indeksfilerne og dataene vil blive slettet, men partitionsdefinitionen bliver ikke påvirket.
- Du kan afkorte en beskadiget InnoDB-tabel.
- Hvis du bruger file-per-table tablespace, taber TRUNCATE TABLE-sætningen tablespacet og opretter et nyt.
- Vi kan bruge TRUNCATE TABLE i præstationsskemaoversigtstabeller, men det sletter ikke tabellernes data. Det nulstiller oversigtskolonnens værdier til NULL eller nul (0).
Forskelle mellem DELETE og TRUNCATE tabeludsagn
Sr. | SLET erklæring | TRUNCATE TABLE Statement |
1 | DELETE-sætning er en DML-sætning. Ændringerne logges i databasens binære logfiler. | TRUNCATE TABLE-sætning er en DDL-sætning. Handlingen er ikke logget i de binære logfiler. |
2 | Handlingen kan rulles tilbage. | Denne handling kan ikke rulles tilbage. |
3 | Det er langsommere, fordi ændringer logges til de binære logfiler, DML-triggere udføres. | Det er hurtigere, fordi det sletter den eksisterende tabel og opretter en ny. |
4 | DELETE-sætning henter rækkeniveaulåsen. | TRUNCATE TABLE låser datasiderne, før dataene fjernes. |
5 | Du kan fjerne specifikke poster ved at bruge WHERE-sætningen | Truncate table fjerner alle data fra tabellen. |
Brug af TRUNCATE TABLE-erklæringen i praksis
Syntaksen for Truncate Table-sætningen er som følger:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Bemærk:Navnet på den tabel, du vil slette posten fra, er efter TRUNCATE TABLE udmelding. Antag, at du vil afkorte tblStudent bord. Forespørgslen skal være som følger:
TRUNCATE TABLE tblStudent
Til demonstrationen har jeg installeret MySQL 8.0 Server og oprettet en database ved navn studentsDB . Der har jeg lavet tabellerne med navnet tblStudent , tblSchool, og tblStudentCounsiler.
Følgende script opretter databasen og tabellerne:
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;
Jeg har oprettet en fremmednøgle på tblStudent tabel, der refererer til Skole-id kolonne i tblStudent tabel.
Scriptet til at oprette en fremmednøgle er følgende:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
ER-diagrammet er nedenfor:
Følgende script indsætter de summerede data i alle tabeller:
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');
Lad os nu forstå anvendelsestilfældene.
Lad os først afkorte tblStudentCounsiler med følgende forespørgsel:
mysql> truncate table studentdb.tblStudentCounsiler;
Udgangen :
Query OK, 0 rows affected (0.08 sec)
Kør SELECT-sætningen for at se dataene:
mysql> select * from studentdb.tblStudentCounsiler;
Forespørgselsoutput:
Empty set (0.01 sec)
Som du kan se på skærmbilledet ovenfor, blev kommandoen udført med succes.
Lad os nu prøve at afkorte tblSchool tabel med følgende forespørgsel:
mysql> Truncate table tblSchool;
Følgende fejl opstår, fordi vi ikke kan afkorte en tabel, der refereres til af en anden tabel:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
For at rette denne fejl skal vi droppe den fremmede nøgle. Kør følgende forespørgsel for at gøre det:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Forespørgselsoutput:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
Når den fremmede nøgle er sluppet, skal du køre kommandoen truncate table:
mysql> Truncate table tblSchool;
Forespørgselsoutput:
Query OK, 0 rows affected (0.08 sec)
Oversigt
Den aktuelle artikel introducerede TRUNCATE TABLE-erklæringen og dens karakteristika. Vi blev fortrolige med forskellene mellem TRUNCATE TABLE og DELETE-kommandoerne, samt udforskede nogle praktiske eksempler for at tydeliggøre begreberne.