删除
- DELETE是DML命令。
- 使用行锁执行DELETE语句,表中的每一行都被锁定以进行删除。
- 我们可以在where子句中指定过滤器
- 如果存在条件,它将删除指定的数据。
- 删除激活触发器,因为该操作是单独记录的。
- 比截断慢,因为它保留日志。
- 可以回滚。
截短
- TRUNCATE是DDL命令。
- TRUNCATE TABLE始终锁定表和页面,但不锁定每一行。
- 无法使用Where条件。
- 它删除所有数据。
- TRUNCATE TABLE无法激活触发器,因为该操作不会记录单个行的删除。
- 在性能上更快,因为它不保留任何日志。
可以回滚。
与TRANSACTION一起使用时,DELETE和TRUNCATE都可以回滚(TRUNCATE可以在SQL Server中回滚,但不能在MySQL中回滚)。
- 如果存在具有自动递增的PK,则truncate将重置计数器
http://beginner-sql-tutorial.com/sql-delete-statement.htm


![mysql / sqlserver中截断与删除的比较[重复] mysql / sqlserver中截断与删除的比较[重复]](http://www.mshxw.com/aiimages/31/398873.png)
