Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiểu về BẢNG TRUNCATE của MySQL bằng các ví dụ thực tế

Câu lệnh MySQL TRUNCATE TABLE là một câu lệnh DDL được sử dụng để xóa tất cả các bản ghi khỏi bảng MySQL. Khi chúng tôi chạy lệnh này, nó sẽ xóa bảng hiện có trước và sau đó tạo một bảng mới bằng cách sử dụng định nghĩa bảng. Trình tự thực hiện truy vấn của lệnh TRUNCATE TABLE là DROP TABLE và CREATE TABLE.

Các đặc điểm của câu lệnh TRUNCATE TABLE như sau:

  1. Khi chúng tôi chạy câu lệnh TRUNCATE TABLE thay vì xóa hàng, MySQL bỏ bảng và tạo lại nó. Nó nhanh hơn câu lệnh DELETE, đặc biệt là đối với các bảng lớn.
  2. BẢNG TRUNCATE bỏ qua các trình kích hoạt XÓA để đạt được hiệu suất cao.
  3. Không thể khôi phục BẢNG TRUNCATE vì nó gây ra một cam kết ngầm.
  4. Nếu bạn đang sử dụng công cụ lưu trữ được hỗ trợ bởi DDL nguyên tử và máy chủ tạm dừng trong quá trình hoạt động BẢNG TRUNCATE, các giao dịch sẽ được cam kết hoàn toàn hoặc được khôi phục lại.
  5. Nó đặt lại giá trị cột AUTO_INCREAMENT về giá trị bắt đầu.
  6. Câu lệnh TRUNCATE TABLE không thành công nếu bạn đã tạo khóa ngoại trên bảng InnoDB hoặc NDB.
  7. Mặc dù bảng hoặc chỉ mục bị hỏng và định nghĩa bảng hợp lệ, câu lệnh TRUNCATE TABLE sẽ tạo lại một bảng trống.
  8. Câu lệnh TRUNCATE TABLE giữ nguyên phân vùng. Các tệp và dữ liệu chỉ mục sẽ bị xóa nhưng định nghĩa phân vùng sẽ không bị ảnh hưởng.
  9. Bạn có thể cắt bớt một bảng InnoDB bị hỏng.
  10. Nếu bạn đang sử dụng vùng bảng tệp trên mỗi bảng, thì câu lệnh TRUNCATE TABLE sẽ loại bỏ vùng bảng và tạo một vùng bảng mới.
  11. Chúng tôi có thể sử dụng BẢNG TRUNCATE trong các bảng tóm tắt giản đồ hiệu suất, nhưng nó không xóa dữ liệu của bảng. Nó đặt lại các giá trị cột tóm tắt thành NULL hoặc Zero (0).

Sự khác biệt giữa câu lệnh bảng DELETE và TRUNCATE

Câu lệnh
Sr. Tuyên bố DELETE Tuyên bố BẢNG TRUNCATE
1 Câu lệnh DELETE là một câu lệnh DML. Các thay đổi được ghi vào nhật ký nhị phân của cơ sở dữ liệu. TRUNCATE TABLE là một câu lệnh DDL. Thao tác không được ghi vào nhật ký nhị phân.
2 Thao tác này có thể được khôi phục lại. Không thể hoàn tác thao tác này.
3 Nó chậm hơn vì các thay đổi được ghi vào nhật ký nhị phân, các trình kích hoạt DML được thực thi. Nó nhanh hơn vì nó xóa bảng hiện có và tạo một bảng mới.
4 Câu lệnh DELETE nhận được khóa cấp hàng. BẢNG TRUNCATE khóa các trang dữ liệu trước khi xóa dữ liệu.
5 Bạn có thể xóa các bản ghi cụ thể bằng cách sử dụng mệnh đề WHERE Bảng cắt ngắn xóa tất cả dữ liệu khỏi bảng.

Sử dụng câu lệnh TRUNCATE TABLE trong thực tế

Cú pháp của câu lệnh Truncate Table như sau:

TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

Lưu ý:Tên của bảng bạn muốn xóa bản ghi nằm sau BẢNG TRUNCATE tuyên bố. Giả sử bạn muốn cắt ngắn tblStudent bàn. Truy vấn phải như sau:

TRUNCATE TABLE tblStudent

Đối với phần trình diễn, tôi đã cài đặt Máy chủ MySQL 8.0 và tạo cơ sở dữ liệu có tên studentDB . Ở đó, tôi đã tạo các bảng có tên tblStudent , tblSchool, tblStudentCounsiler.

Tập lệnh sau tạo cơ sở dữ liệu và bảng:

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;

Tôi đã tạo khóa ngoại trên tblStudent bảng tham chiếu đến SchoolID cột tblStudent bảng.

Tập lệnh để tạo khóa ngoại như sau:

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

Sơ đồ ER dưới đây:

Tập lệnh sau sẽ chèn dữ liệu được tổng hợp trong tất cả các bảng:

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

Bây giờ hãy để chúng tôi hiểu các trường hợp sử dụng.

Trước tiên, hãy để chúng tôi cắt ngắn tblStudentCounsiler với truy vấn sau:

mysql> truncate table studentdb.tblStudentCounsiler;

Đầu ra :

Query OK, 0 rows affected (0.08 sec)

Chạy câu lệnh SELECT để xem dữ liệu:

mysql> select * from studentdb.tblStudentCounsiler;

Đầu ra truy vấn:

Empty set (0.01 sec)

Như bạn có thể thấy trong ảnh chụp màn hình ở trên, lệnh đã được thực thi thành công.

Bây giờ, chúng ta hãy thử cắt ngắn tblSchool bảng với truy vấn sau:

mysql> Truncate table tblSchool;

Lỗi sau xảy ra vì chúng tôi không thể cắt bớt một bảng đang được tham chiếu bởi một bảng khác:

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

Để khắc phục lỗi này, chúng ta phải thả khóa ngoại. Chạy truy vấn sau để thực hiện điều đó:

mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

Đầu ra truy vấn:

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

Sau khi khóa ngoại bị bỏ, hãy chạy lệnh cắt ngắn bảng:

mysql> Truncate table tblSchool;

Đầu ra truy vấn:

Query OK, 0 rows affected (0.08 sec)

Tóm tắt

Bài viết hiện tại đã giới thiệu câu lệnh TRUNCATE TABLE và các đặc điểm của nó. Chúng tôi đã làm quen với sự khác biệt giữa TRUNCATE TABLE và các lệnh DELETE, cũng như khám phá một số ví dụ thực tế để làm rõ các khái niệm.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết lập Laravel trên máy Mac php lỗi di chuyển nghệ nhân:Không có tệp hoặc thư mục như vậy

  2. MySQL JOIN với LIMIT 1 trên bảng đã tham gia

  3. Lỗi là gì Mọi bảng dẫn xuất phải có bí danh riêng trong MySQL?

  4. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Gentoo

  5. Làm cách nào để tôi có thể thao túng mức độ liên quan của tìm kiếm toàn văn bản trong MySQL để làm cho một trường trở nên 'có giá trị' hơn trường khác?