MySQL删除数据记录命令truncate和delete之区别
在MySQL数据库中,如果需要删除部分数据记录,一般使用delete from命令,通过where关键字指定条件用来限定要删除的记录范围。如果需要把表中的全部记录删除,可以使用truncate命令,也可以使用不带条件的delete from命令。
truncate命令和delete from命令的区别主要有以下几点:
一、truncate命令只能用于删除表中的全部记录,而使用delete from命令可以删除表中的部分数据记录,通过where关键字指定条件用来限定要删除的记录范围。
二、delete from命令是DML语句,truncate命令是DDL语句。因此,如果定义了before delete或者after delete类型的触发器,执行delete from命令时触发器会被执行。执行truncate命令时触发器中不会被执行。
三、如果表中定义了自增字段,使用truncate命令删除表中的数据后,再次向表中添加记录时,自增字段的默认值重置为1;使用delete from命令删除表中的数据后,再次向表中添加记录时,自增字段的值为删除数据时该字段的最大值加1。
1、使用truncate删除表中记录
mysql> create table t1(id int primary key auto_increment,name char(20));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1(name) values('Jack'),('Tom'),('John'),('Jerry'),('Mark');
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | Jack |
| 2 | Tom |
| 3 | John |
| 4 | Jerry |
| 5 | Mark |
+----+-------+
5 rows in set (0.00 sec)
mysql> truncate t1;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1(name) values('Rose');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | Rose |
+----+------+
1 row in set (0.00 sec)
2、使用delete from 删除表中记录
mysql> create table t2(id int primary key auto_increment,name char(20));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t2(name) values('Zhang'),('Wang'),('Li'),('Zhao');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from t2;
+----+-------+
| id | name |
+----+-------+
| 1 | Zhang |
| 2 | Wang |
| 3 | Li |
| 4 | Zhao |
+----+-------+
4 rows in set (0.00 sec)
mysql> delete from t2;
Query OK, 4 rows affected (0.02 sec)
mysql> insert into t2(name) values('Liu');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t2;
+----+------+
| id | name |
+----+------+
| 5 | Liu |
+----+------+
1 row in set (0.00 sec)