sql server中Delete和Truncate之间的区别.我错了吗?

Hot*_*ter 17 sql sql-server

在最近的一次采访中,我被问到了两者之间的区别.我回复了一般的答复,我们都知道......

然后面试官询问截断是否可以回滚?我回答说没有......

面试官说它可以回滚,并要求我详细了解删除和截断的幕后操作细节,稍后再查看.

那么我在这里发布这个问题不仅仅是为了定义和我们所知道的事情......而是为了达到它的核心.在这方面投入光线将是非常昂贵的......

提前致谢

Joe*_*ips 18

显然,截断不能回滚的想法是一个神话.

摘要

  • 可以从事务中回滚截断.不同之处在于truncate会在日志中记录为页面释放,而不是删除每个要删除的记录.一旦提交了操作,就无法撤消操作.
  • 截断时,您正在重置标识字段.当你删除时,你不是.
  • 您不能截断由外键引用的表.
  • 截断不会触发任何ON DELETE触发器

  • 很好,我一段时间写了那篇文章:-) (3认同)

Rem*_*anu 5

truncate操作将释放属于该表的所有页面.记录这些解除分配并可以回滚.删除会将所有行标记为已删除,并记录每一行.