MySQL中的truncate和delete操作的主要区别在于:
- truncate删除整张表, delete删除表中的部分或所有记录
truncate用于 Truncate an entire table 的。
delete 用于 Delete some rows from a table。 - truncate速度更快
由于truncate直接删除表,因此执行速度更快。
delete需要检索被删除的记录,速度相对较慢。 - truncate事务处理方式不同
truncate操作不能回滚,不能被roll back。
delete可以被回滚,适用于事务处理。 - truncate重建索引
truncate删除表后,会自动重新生成所有索引。
delete不会重建索引。 - truncate不使用日志
truncate不对日志文件产生作用,不会导致binlog大小增长。
delete会生成binlog。 - truncate重置自增主键
truncate会重置表的AUTO_INCREMENT列。
而delete并不会重置。
总的来说,二者的主要区别在于:
- truncate删除整张表,delete删除部分记录
- truncate速度更快
- truncate不能回滚,delete可以回滚
- truncate重建索引,delete不重建索引
- truncate不使用日志,delete使用日志
- truncate重置自增主键,delete并不重置
truncate用于完全清空表,speed快。delete用于删除部分记录,能回滚。