Computer >> Máy Tính >  >> Lập trình >> MySQL

Sự khác biệt giữa lệnh MySQL TRUNCATE và DELETE là gì?

Như chúng ta biết rằng TRUNCATE sẽ xóa tất cả các hàng mà không xóa cấu trúc của bảng khỏi cơ sở dữ liệu. Công việc tương tự có thể được thực hiện với sự trợ giúp của lệnh DELETE để xóa tất cả các hàng khỏi bảng. Nhưng có một sự khác biệt đáng kể về việc khởi tạo lại PRIMARY KEY AUTO_INCREMENT giữa cả hai lệnh.

Giả sử một cột được xác định AUTO_INCREMENT có CHỨNG TỪ KHÓA CHÍNH, thì khi xóa tất cả các hàng bằng lệnh DELETE sẽ không khởi tạo lại bảng, tức là khi nhập các hàng mới, số AUTO_INCREMENT sẽ bắt đầu sau hàng được chèn cuối cùng. Ngược lại, khi sử dụng TRUNCATE, bảng sẽ được khởi tạo lại giống như một bảng mới được tạo. Có nghĩa là sau khi sử dụng lệnh TRUNCATE và khi chèn các hàng mới, số AUTO_INCREMENT sẽ bắt đầu từ 1.

Ví dụ

Ví dụ sau sẽ chứng minh khái niệm trên -

mysql> Create table Testing(Id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(20));
Query OK, 0 rows affected (0.15 sec)

mysql> Insert into testing(Name) values('Gaurav'),('Rahul'),('Aarav'),('Yashraj'),('Manak');
Query OK, 5 rows affected (0.09 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> Select * from testing;

+----+---------+
| Id | Name    |
+----+---------+
| 1  | Gaurav  |
| 2  | Rahul   |
| 3  | Aarav   |
| 4  | Yashraj |
| 5  | Manak   |
+----+---------+

5 rows in set (0.00 sec)

mysql> Delete from testing where id >=4;
Query OK, 2 rows affected (0.04 sec)

mysql> Select * from testing;

+----+--------+
| Id | Name   |
+----+--------+
| 1  | Gaurav |
| 2  | Rahul  |
| 3  | Aarav  |
+----+--------+

3 rows in set (0.00 sec)

mysql> Insert into testing(Name) values('Harshit'),('Lovkesh');
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Select * from testing;

+----+---------+
| Id | Name    |
+----+---------+
| 1  | Gaurav  |
| 2  | Rahul   |
| 3  | Aarav   |
| 6  | Harshit |
| 7  | Lovkesh |
+----+---------+

5 rows in set (0.00 sec)

mysql> Truncate table testing;
Query OK, 0 rows affected (0.10 sec)

mysql> Insert into testing(Name) values('Harshit'),('Lovkesh'),('Ram'),('Gaurav');
Query OK, 4 rows affected (0.11 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> Select * from testing;

+----+---------+
| Id | Name    |
+----+---------+
| 1  | Harshit |
| 2  | Lovkesh |
| 3  | Ram     |
| 4  | Gaurav  |
+----+---------+

4 rows in set (0.00 sec)