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

Forstå MySQL TRUNCATE TABLE ved hjælp af praktiske eksempler

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:

  1. 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.
  2. TRUNCATE TABLE omgår DELETE-triggerne for at opnå høj ydeevne.
  3. TRUNCATE TABLE kan ikke rulles tilbage, fordi det forårsager en implicit commit.
  4. Hvis du bruger atomare DDL-understøttede lagringsmotorer, og serveren stopper under TRUNCATE TABLE-operationerne, vil transaktionerne blive fuldt ud forpligtet eller rullet tilbage.
  5. Den nulstiller AUTO_INCREAMENT-kolonnernes værdier til startværdien.
  6. TRUNCATE TABLE-sætningen mislykkes, hvis du har oprettet fremmednøgler på InnoDB- eller NDB-tabeller.
  7. Selvom tabellen eller indekset er beskadiget, og tabeldefinitionen er gyldig, genskaber TRUNCATE TABLE-sætningen en tom tabel.
  8. TRUNCATE TABLE-sætningen bevarer partitionering. Indeksfilerne og dataene vil blive slettet, men partitionsdefinitionen bliver ikke påvirket.
  9. Du kan afkorte en beskadiget InnoDB-tabel.
  10. Hvis du bruger file-per-table tablespace, taber TRUNCATE TABLE-sætningen tablespacet og opretter et nyt.
  11. 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.


  1. Sådan fungerer FROM_UNIXTIME() i MariaDB

  2. Sådan partitioneres postgres-tabel ved hjælp af mellemtabel

  3. Hvordan genereres tabel API-pakke i Oracle SQL Developer?

  4. Grupperet aggregeret pushdown