MySQL TRUNCATE 命令和 DELETE 命令有何区别?
我们知道 TRUNCATE 命令将从数据库中删除所有行,但不会删除表的结构。使用 DELETE 命令也可以删除表中的所有行,但两个命令之间的一个显著区别在于重新初始化 PRIMARY KEY AUTO_INCREMENT。
假设有一列定义为AUTO_INCREMENT,具有 PRIMARY KEY 约束,那么使用 DELETE 命令删除所有行不会重新初始化表,即在输入新行时,AUTO_INCREMENT 数字将从最后插入的行后开始。相反,在使用 TRUNCATE 命令之后,表将像新创建的表一样重新初始化。这意味着使用 TRUNCATE 命令并在插入新行后,AUTO_INCREMENT 数字将从1开始。
阅读更多:MySQL 教程
示例
以下示例将演示上述概念−
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)
极客教程