SQL Server中Truncate,Delete,Drop的异同点

相同点:

  truncate 和不带 where 子句的 delete,以及 drop 都会删除表内的数据

  不同点:

  1. truncate 和 delete 只删除数据不删除表的结构(定义)

  drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。

  2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。

  truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。

  3.delete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动。

  显然 drop 语句将表所占用的空间全部释放。

  truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

  4.速度,一般来说: drop> truncate > delete

  5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.否则哭都来不及。

  使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.

  想删除表,当然用 drop

  想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。

  如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

### SQL ServerTRUNCATEDELETE 的区别及用法 #### 定义与功能差异 `TRUNCATE TABLE` 是一种快速删除表中所有数据的方法,它不会记录单个行的删除操作。这使得 `TRUNCATE` 比 `DELETE` 更高效,尤其是在处理大量数据时[^1]。 ```sql TRUNCATE TABLE table_name; ``` 相比之下,`DELETE` 语句用于有条件地移除特定的数据行。可以指定条件来决定哪些行应该被删除,并且支持事务回滚以及触发器激活等功能[^2]。 ```sql DELETE FROM table_name WHERE condition; ``` #### 性能对比 由于 `TRUNCATE` 不会逐行扫描并日志化每一项更改,因此其执行速度通常远超于 `DELETE` 。然而,在某些情况下可能无法使用 `TRUNCATE` ,比如当存在外键约束或其他依赖关系的时候,则需采用更灵活但是效率较低一的 `DELETE` 来完成任务[^3]。 #### 日志记录方式不同 另一个显著差别在于它们的日志机制上: - 对于 `TRUNCATE` 而言,只会记录页面分配的变化而不是具体的每条记录; - 反之,对于 `DELETE` 则会对每一次单独的操作都做详细的日志记载以便日后审计追踪或恢复用途[^4]。 #### 使用场景建议 如果只是想要清空整个表格而不需要保留任何历史版本的话推荐优先考虑 `TRUNCATE`;而对于那些需要基于一定逻辑筛选后才进行清理工作的场合则更适合选用带有适当过滤条件设置后的 `DELETE` 命令[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值