mysql清空表中truncate与delete都是删除表的操作,但还是有些许不同。
delete和truncate区别如下:
一、灵活性:delete可以条件删除数据,而truncate只能删除表的所有数据;
delete * from table_name;
delete from table_test where ...
truncate table table_test
注 : truncate操作中的table可以省略,delete操作中的*可以省略
delete是一条一条删除记录的,配合事件(transaction)和回滚(rollback)可以找回数据,且自增(auto_increment)不会重置。 truncate则是直接删除整个表,再重新创建一个一模一样的新表,auto_increment会被重置,且数据无法找回。
二、效率:delete效率低于truncate,delete是一行一行地删除,truncate会重建表结构,
三、事务:truncate是DDL语句,需要drop权限,因此会隐式提交,不能够rollback;delete是DML语句,可以使用rollback回滚。
四、触发器:truncate 不能触发任何Delete触发器;而delete可以触发delete触发器。
1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢) 2> truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因 3> truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数。而 delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件
mysql> select * from students_bak; +-----+----------+--------+---------+ | sid | sname | gender | dept_id | +-----+----------+--------+---------+ | 101 | zhangsan | male | 10 | | 1 | aa | 1 | 1 | +-----+----------+--------+---------+ 2 rows in set (0.00 sec) mysql> truncate table students_bak; Query OK, 0 rows affected (0.16 sec) mysql> select * from students_bak; Empty set (0.00 sec) mysql> set autocommit=off; Query OK, 0 rows affected (0.01 sec) mysql> select * from students3; +-----+-------+--------+---------+--------+ | sid | sname | gender | dept_id | sname2 | +-----+-------+--------+---------+--------+ | 100 | NULL | 1 | 1 | NULL | +-----+-------+--------+---------+--------+ 1 row in set (0.01 sec) mysql> truncate table students3; Query OK, 0 rows affected (0.06 sec) mysql> rollback; Query OK, 0 rows affected (0.00 sec) mysql> select * from students3; Empty set (0.00 sec) mysql> delete from students; Query OK, 5 rows affected (0.00 sec) mysql> select * from students; Empty set (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.07 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 3 | 1 | | 4 | cc | 3 | 1 | | 5 | dd | 1 | 2 | | 6 | aac | 1 | 1 | | 10 | a | 1 | 1 | +-----+-------+--------+---------+ 5 rows in set (0.00 sec)
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛