关于mysql / sqlserver,我的脑子里有一件事,即删除/截断
哪一个更好更快?
在哪里使用删除?
在哪里使用truncate?
答案 0 :(得分:94)
删除
TRUNCATE
答案 1 :(得分:9)
最重要的区别是DELETE操作是事务安全的并且已记录,这意味着可以回滚DELETE。 TRUNCATE无法在事务内完成,无法回滚。因为没有记录TRUNCATE,所以恢复错误的TRUNCATEd表比从DELETE恢复要大得多。
如果外键约束被破坏,DELETE将失败; TRUNCATE可能不会遵守外键约束(它适用于InnoDB表)。 DELETE将触发任何ON DELETE触发器; TRUNCATE不会。
截断操作删除并重新创建表,这比逐个删除行要快得多,特别是对于大表。
当表设置为空时,需要将自动递增键重置为1。 它比DELETE更快,因为它删除了所有数据。 DELETE将扫描表以生成受影响的行数。
需要根据可选的WHERE子句删除行。 需要日志并应用外键约束
答案 2 :(得分:2)
DELETE
命令用于从表中删除行
TRUNCATE
删除表中的所有行。无法回滚操作,也不会触发任何触发器。因此,TRUNCATE
速度更快,并且不会使用与DELETE
一样多的撤消空间。
答案 3 :(得分:0)
差异:
1)从表中删除完整数据,下一个自动增量ID将从1开始,其中删除将以下一个ID开始。
2)两者都将保持结构完整并仅删除数据
3)删除你可以使用限制,如截断你不能。