Инструкцията на MySQL TRUNCATE TABLE е DDL израз, използван за премахване на всички записи от таблицата на MySQL. Когато изпълним тази команда, тя първо премахва съществуващата таблица и след това създава нова таблица, използвайки дефиницията на таблицата. Последователността на изпълнение на заявката на командата TRUNCATE TABLE е DROP TABLE и CREATE TABLE.
Характеристиките на израза TRUNCATE TABLE са както следва:
- Когато изпълним оператора TRUNCATE TABLE вместо да изтриваме редове, MySQL пуска таблицата и я създава отново. Той е по-бърз от оператора DELETE, особено за големи таблици.
- TRUNCATE TABLE заобикаля тригерите DELETE, за да постигне висока производителност.
- TRUNCATE TABLE не може да се върне назад, тъй като причинява неявно извършване.
- Ако използвате поддържани атомни DDL механизми за съхранение и сървърът спре по време на операциите TRUNCATE TABLE, транзакциите ще бъдат изцяло ангажирани или върнати обратно.
- Възстановява стойностите на колоните AUTO_INCREAMENT до началната стойност.
- Изразът TRUNCATE TABLE е неуспешен, ако сте създали външни ключове в InnoDB или NDB таблици.
- Въпреки че таблицата или индексът са повредени и дефиницията на таблицата е валидна, изразът TRUNCATE TABLE пресъздава празна таблица.
- Изразът TRUNCATE TABLE запазва разделянето. Индексните файлове и данните ще бъдат премахнати, но дефиницията на дяла няма да бъде засегната.
- Можете да съкратите повредена таблица на InnoDB.
- Ако използвате пространство за таблици файл на таблица, операторът TRUNCATE TABLE премахва пространството за таблици и създава ново.
- Можем да използваме TRUNCATE TABLE в обобщените таблици на схемата за ефективност, но това не изтрива данните от таблиците. Той нулира стойностите на обобщената колона на NULL или нула (0).
Разлики между операторите на таблицата DELETE и TRUNCATE
Sr. | Изтриване на изявление | Изявление TRUNCATE TABLE |
1 | Изразът DELETE е DML израз. Промените се записват в двоичните регистрационни файлове на базата данни. | Изразът TRUNCATE TABLE е DDL оператор. Операцията не се регистрира в двоичните регистрационни файлове. |
2 | Операцията може да бъде върната назад. | Тази операция не може да бъде върната назад. |
3 | Това е по-бавно, защото промените се записват в двоичните регистрационни файлове, изпълняват се DML тригери. | По-бързо е, защото премахва съществуващата таблица и създава нова. |
4 | Изразът DELETE придобива заключването на ниво ред. | TRUNCATE TABLE заключва страниците с данни, преди да ги премахне. |
5 | Можете да премахнете конкретни записи, като използвате клаузата WHERE | Отрязването на таблицата премахва всички данни от таблицата. |
Използване на оператора TRUNCATE TABLE на практика
Синтаксисът на израза Truncate Table е както следва:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]
Забележка:Името на таблицата, от която искате да изтриете записа, е след TRUNCATE TABLE изявление. Да предположим, че искате да съкратите tblStudent маса. Заявката трябва да бъде както следва:
TRUNCATE TABLE tblStudent
За демонстрацията инсталирах MySQL 8.0 Server и създадох база данни с име studentsDB . Там създадох таблиците с име tblStudent , tblSchool, и tblStudentCounsiler.
Следният скрипт създава базата данни и таблиците:
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;
Създадох външен ключ на tblStudent таблица, която препраща към SchoolID колона на tblStudent таблица.
Скриптът за създаване на външен ключ е следният:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;
Диаграмата на ER е по-долу:
Следният скрипт вмъква сумираните данни във всички таблици:
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');
Сега нека разберем случаите на употреба.
Първо, нека съкратим tblStudentCounsiler със следната заявка:
mysql> truncate table studentdb.tblStudentCounsiler;
Изход :
Query OK, 0 rows affected (0.08 sec)
Изпълнете оператора SELECT, за да видите данните:
mysql> select * from studentdb.tblStudentCounsiler;
Изход на заявка:
Empty set (0.01 sec)
Както можете да видите на екранната снимка по-горе, командата е изпълнена успешно.
Сега нека се опитаме да съкратим tblSchool таблица със следната заявка:
mysql> Truncate table tblSchool;
Възниква следната грешка, защото не можем да съкратим таблица, която се препраща от друга таблица:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)
За да коригираме тази грешка, трябва да пуснем външния ключ. Изпълнете следната заявка, за да го направите:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;
Изход на заявка:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
След като външният ключ бъде изпуснат, изпълнете командата truncate table:
mysql> Truncate table tblSchool;
Изход на заявка:
Query OK, 0 rows affected (0.08 sec)
Резюме
Настоящата статия въвежда израза TRUNCATE TABLE и неговите характеристики. Запознахме се с разликите между TRUNCATE TABLE и командите DELETE, както и проучихме някои практически примери за изясняване на концепциите.