【MySQL】delete和truncate的用法和区别
一、delete和truncate的用法
有如下数据表t_student
关键字delete和truncate都用来清除表中数据,语法结构为:
delete from t_student;
truncate table t_student;
两条SQL操作后的结果一样:删除了表中数据,但是会保留表的结构:
二、delete和truncate的区别
从最终的结果来看,虽然使用truncate操作和使用delete操作都可以删除表中的全部记录,但是两者还是有很多区别的,其区别主要体现在以下几个方面:
(1)delete为数据操作语言DML,truncate为数据定义语言DDL。它们两分类不一样。
(2) delete操作是将表中所有记录一条一条删除直到删除完;truncate操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,truncate操作的效率更高。
(3)delete操作可以回滚;truncate操作会导致隐式提交,因此不能回滚。
(4)delete操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”),截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。delete操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;truncate操作则会重新从1开始自增。