sql >> Database >  >> RDS >> Mysql

MySQL TRUNCATE TABLE begrijpen door praktische voorbeelden

MySQL TRUNCATE TABLE-instructie is een DDL-instructie die wordt gebruikt om alle records uit de MySQL-tabel te verwijderen. Wanneer we deze opdracht uitvoeren, wordt eerst de bestaande tabel verwijderd en wordt vervolgens een nieuwe tabel gemaakt met behulp van de tabeldefinitie. De uitvoeringsvolgorde van de query van de opdracht TRUNCATE TABLE is DROP TABLE en CREATE TABLE.

De kenmerken van het TRUNCATE TABLE-statement zijn als volgt:

  1. Als we de TRUNCATE TABLE-instructie uitvoeren in plaats van rijen te verwijderen, verwijdert MySQL de tabel en maakt deze opnieuw aan. Het is sneller dan het DELETE-statement, vooral voor grote tabellen.
  2. TRUNCATE TABLE omzeilt de DELETE-triggers om hoge prestaties te bereiken.
  3. TRUNCATE TABLE kan niet worden teruggedraaid omdat dit een impliciete commit veroorzaakt.
  4. Als u door atomaire DDL ondersteunde opslag-engines gebruikt en de server stopt tijdens de TRUNCATE TABLE-bewerkingen, worden de transacties volledig vastgelegd of teruggedraaid.
  5. Het zet de AUTO_INCREAMENT-kolomwaarden terug naar de startwaarde.
  6. De instructie TRUNCATE TABLE mislukt als u externe sleutels hebt gemaakt op InnoDB- of NDB-tabellen.
  7. Hoewel de tabel of index beschadigd is en de tabeldefinitie geldig is, maakt de TRUNCATE TABLE-instructie een lege tabel opnieuw aan.
  8. De instructie TRUNCATE TABLE behoudt de partitionering. De indexbestanden en gegevens worden verwijderd, maar de partitiedefinitie wordt niet beïnvloed.
  9. U kunt een beschadigde InnoDB-tabel afkappen.
  10. Als u een tabelruimte per tabel gebruikt, verwijdert de TRUNCATE TABLE-instructie de tabelruimte en maakt een nieuwe aan.
  11. We kunnen TRUNCATE TABLE gebruiken in overzichtstabellen van prestatieschema's, maar de gegevens van de tabellen worden niet verwijderd. Het zet de waarden van de samenvattingskolommen terug naar NULL of Nul (0).

Verschillen tussen DELETE- en TRUNCATE-tabelstatements

Sr. VERWIJDEREN Verklaring TRUNCATE TABLE-instructie
1 DELETE-instructie is een DML-instructie. De wijzigingen worden vastgelegd in de binaire logboeken van de database. TRUNCATE TABLE-instructie is een DDL-instructie. De bewerking wordt niet vastgelegd in de binaire logboeken.
2 De bewerking kan worden teruggedraaid. Deze bewerking kan niet worden teruggedraaid.
3 Het is langzamer omdat wijzigingen worden vastgelegd in de binaire logs, DML-triggers worden uitgevoerd. Het is sneller omdat het de bestaande tabel verwijdert en een nieuwe maakt.
4 Delete-instructie verwerft de vergrendeling op rijniveau. TRUNCATE TABLE vergrendelt de gegevenspagina's voordat de gegevens worden verwijderd.
5 Je kunt specifieke records verwijderen door de WHERE-clausule te gebruiken Truncate-tabel verwijdert alle gegevens uit de tabel.

De TRUNCATE TABLE-verklaring in de praktijk gebruiken

De syntaxis van de Truncate Table-instructie is als volgt:

TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

Opmerking:de naam van de tabel waaruit u de record wilt verwijderen, staat achter de TRUNCATE TABLE uitspraak. Stel dat u de tblStudent . wilt afkappen tafel. De vraag zou als volgt moeten zijn:

TRUNCATE TABLE tblStudent

Voor de demonstratie heb ik MySQL 8.0 Server geïnstalleerd en een database gemaakt met de naam studentsDB . Daar heb ik de tabellen gemaakt met de naam tblStudent , tblSchool, en tblStudentCounsiler.

Het volgende script maakt de database en tabellen aan:

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;

Ik heb een externe sleutel gemaakt op de tblStudent tabel die verwijst naar de SchoolID kolom van de tblStudent tafel.

Het script om een ​​externe sleutel te maken is het volgende:

ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;

Het ER-diagram staat hieronder:

Het volgende script voegt de opgetelde gegevens in alle tabellen in:

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');

Laten we nu de gebruiksscenario's begrijpen.

Laten we eerst de tblStudentCounsiler . afkappen met de volgende vraag:

mysql> truncate table studentdb.tblStudentCounsiler;

De uitvoer :

Query OK, 0 rows affected (0.08 sec)

Voer de SELECT-instructie uit om de gegevens te bekijken:

mysql> select * from studentdb.tblStudentCounsiler;

Uitvoer van zoekopdracht:

Empty set (0.01 sec)

Zoals je kunt zien in de bovenstaande schermafbeelding, is de opdracht met succes uitgevoerd.

Laten we nu proberen de tblSchool . af te kappen tabel met de volgende vraag:

mysql> Truncate table tblSchool;

De volgende fout treedt op omdat we een tabel waarnaar wordt verwezen door een andere tabel niet kunnen afkappen:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)

Om deze fout op te lossen, moeten we de externe sleutel laten vallen. Voer de volgende query uit om dit te doen:

mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

Query-uitvoer:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Zodra de externe sleutel is verwijderd, voert u de opdracht truncate table uit:

mysql> Truncate table tblSchool;

Query-uitvoer:

Query OK, 0 rows affected (0.08 sec)

Samenvatting

Het huidige artikel introduceerde de TRUNCATE TABLE-instructie en de kenmerken ervan. We maakten kennis met de verschillen tussen TRUNCATE TABLE en de DELETE-commando's, en verkenden enkele praktische voorbeelden om de concepten te verduidelijken.


  1. 4 manieren om de tijdzone in Oracle te wijzigen

  2. hoe tabelovererving in GreenDao te implementeren

  3. SQL Server-afkapping en 8192-beperking

  4. 3 manieren om de naam van de maand uit een datum te halen in SQL Server (T-SQL)