一尘不染

mysql / sqlserver中截断与删除的比较

mysql

关于mysql / sqlserver,我的脑海里发生了一件事,即 删除/截断

哪个更好更快?

在哪里使用删除?

在哪里使用截断?


阅读 279

收藏
2020-05-17

共1个答案

一尘不染

删除

  1. DELETE是DML命令。
  2. 使用行锁执行DELETE语句,表中的每一行都被锁定以进行删除。
  3. 我们可以在where子句中指定过滤器
  4. 如果存在条件,它将删除指定的数据。
  5. 删除激活触发器,因为该操作是单独记录的。
  6. 比截断慢,因为它保留日志。
  7. 可以回滚。

截短

  1. TRUNCATE是DDL命令。
  2. TRUNCATE TABLE始终锁定表和页面,但不锁定每一行。
  3. 无法使用Where条件。
  4. 它删除所有数据。
  5. TRUNCATE TABLE无法激活触发器,因为该操作不会记录单个行的删除。
  6. 在性能上更快,因为它不保留任何日志。
  7. 可以回滚。

  8. 与TRANSACTION一起使用时,DELETE和TRUNCATE都可以回滚(TRUNCATE可以在SQL Server中回滚,但不能在MySQL中回滚)。

  9. 如果存在具有自动递增的PK,则truncate将重置计数器
2020-05-17