Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Khác biệt giữa lệnh TRUNCATE và DELETE trong MySQL

Cả TRUNCATE và DELETE đều xóa toàn bộ hàng trong bảng nhưng giữ cấu trúc bảng. Khác biệt quan trọng là việc tái khởi tạo (re-initialize) khóa chính AUTO_INCREMENT.

  • DELETE: Không tái khởi tạo bảng. Khi chèn hàng mới, AUTO_INCREMENT tiếp tục từ giá trị cuối cùng.
  • TRUNCATE: Tái khởi tạo bảng như mới tạo. AUTO_INCREMENT bắt đầu lại từ 1.

Ví dụ minh họa

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)
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)
mysql> SELECT * FROM testing;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Gaurav  |
| 2  | Rahul   |
| 3  | Aarav   |
| 6  | Harshit |
| 7  | Lovkesh |
+----+---------+
5 rows in set (0.00 sec)
-- AUTO_INCREMENT tiếp tục từ 6, 7

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)
mysql> SELECT * FROM testing;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Harshit |
| 2  | Lovkesh |
| 3  | Ram     |
| 4  | Gaurav  |
+----+---------+
4 rows in set (0.00 sec)
-- AUTO_INCREMENT reset về 1, 2, 3, 4