Mysql
 sql >> база данни >  >> RDS >> Mysql

Разбиране на MySQL TRUNCATE TABLE чрез практически примери

Инструкцията на MySQL TRUNCATE TABLE е DDL израз, използван за премахване на всички записи от таблицата на MySQL. Когато изпълним тази команда, тя първо премахва съществуващата таблица и след това създава нова таблица, използвайки дефиницията на таблицата. Последователността на изпълнение на заявката на командата TRUNCATE TABLE е DROP TABLE и CREATE TABLE.

Характеристиките на израза TRUNCATE TABLE са както следва:

  1. Когато изпълним оператора TRUNCATE TABLE вместо да изтриваме редове, MySQL пуска таблицата и я създава отново. Той е по-бърз от оператора DELETE, особено за големи таблици.
  2. TRUNCATE TABLE заобикаля тригерите DELETE, за да постигне висока производителност.
  3. TRUNCATE TABLE не може да се върне назад, тъй като причинява неявно извършване.
  4. Ако използвате поддържани атомни DDL механизми за съхранение и сървърът спре по време на операциите TRUNCATE TABLE, транзакциите ще бъдат изцяло ангажирани или върнати обратно.
  5. Възстановява стойностите на колоните AUTO_INCREAMENT до началната стойност.
  6. Изразът TRUNCATE TABLE е неуспешен, ако сте създали външни ключове в InnoDB или NDB таблици.
  7. Въпреки че таблицата или индексът са повредени и дефиницията на таблицата е валидна, изразът TRUNCATE TABLE пресъздава празна таблица.
  8. Изразът TRUNCATE TABLE запазва разделянето. Индексните файлове и данните ще бъдат премахнати, но дефиницията на дяла няма да бъде засегната.
  9. Можете да съкратите повредена таблица на InnoDB.
  10. Ако използвате пространство за таблици файл на таблица, операторът TRUNCATE TABLE премахва пространството за таблици и създава ново.
  11. Можем да използваме 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, както и проучихме някои практически примери за изясняване на концепциите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA LOCAL INFILE е забранено в... PHP

  2. Вмъкване на няколко реда с една заявка MySQL

  3. MySQL срещу MongoDB 1000 четения

  4. Като регистри и букви в MySQL

  5. MySQL списък на всички процедури