关于 mysql/sql 服务器的一件事一直困扰着我,即删除/截断
哪一个更好更快?
在哪里使用删除?
在哪里使用截断?
DELETE
- DELETE 是一个 DML 命令。
- DELETE 语句使用行锁执行,表中的每一行都被锁定以进行删除。
- 我们可以在where子句中指定过滤器
- 如果条件存在,它会删除指定的数据。
- 删除会激活触发器,因为操作是单独记录的。
- 比截断慢,因为它保留日志。
- 回滚是可能的。
TRUNCATE
- TRUNCATE 是一个 DDL 命令。
- TRUNCATE TABLE 始终锁定表和页,但不会锁定每一行。
- 无法使用Where 条件。
- 它删除所有数据。
- TRUNCATE TABLE 无法激活触发器,因为该操作不记录单个行删除。
- 性能方面更快,因为它不保留任何日志。
- 回滚是可能的。
- DELETE 和 TRUNCATE 与以下命令一起使用时都可以回滚
TRANSACTION(TRUNCATE 在 SQL Server 中可以回滚,但在 MySQL 中则不能)。
- 如果存在自动增量的PK,则截断
重置计数器
http://beginner-sql-tutorial.com/sql-delete-statement.htm http://beginner-sql-tutorial.com/sql-delete-statement.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)