MySQL的truncate和delete的区别是什么?

MySQL中的truncate和delete操作的主要区别在于:

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

总的来说,二者的主要区别在于:

  • truncate删除整张表,delete删除部分记录
  • truncate速度更快
  • truncate不能回滚,delete可以回滚
  • truncate重建索引,delete不重建索引
  • truncate不使用日志,delete使用日志
  • truncate重置自增主键,delete并不重置

truncate用于完全清空表,speed快。delete用于删除部分记录,能回滚。