gpt4 book ai didi

sql-server - TRUNCATE 与 DELETE FROM 的优缺点

转载 作者:行者123 更新时间:2023-12-01 17:37:16 25 4
gpt4 key购买 nike

有人可以给我快速概述一下使用以下两个语句的优缺点吗:

TRUNCATE TABLE dbo.MyTable

对比

DELETE FROM dbo.MyTable

归根结底,他们似乎都在做同样的事情;但两者之间一定有区别。

最佳答案

TRUNCATE 不会生成任何回滚数据,这使得它快如闪电。它只是释放表使用的数据页。

但是,如果您处于事务中并希望能够“撤消”此删除,则需要使用 DELETE FROM,它提供了回滚功能。

编辑:请注意,上述内容对于 SQL Server 来说是不正确的(但它确实适用于 Oracle)。在 SQL Server 中,如果您处于事务内部且事务尚未提交,则可以回滚截断操作。从 SQL Server 角度来看,DELETE FROM 和 TRUNCATE 之间的一个关键区别是 this :“DELETE 语句一次删除一行,并在事务日志中为每个删除的行记录一个条目。TRUNCATE TABLE 通过取消分配用于存储表数据的数据页来删除数据,并且仅在事务日志中记录取消分配的页。 ”

换句话来说,TRUNCATE 期间的日志记录较少,因为事务日志中仅记录页释放,而 DELETE FROM 则记录每行删除。这就是 TRUNCATE 快如闪电的原因之一。

还请注意该 MSDN 链接,您无法截断由外键约束引用的表、参与索引 View 或使用事务复制或合并复制发布的表。

编辑2:另一个关键点是 TRUNCATE TABLE 会将您的身份重置为初始种子,而 DELETE FROM 将从中断处继续递增。引用:Ben Robinson 的回答。

关于sql-server - TRUNCATE 与 DELETE FROM 的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com