SQL Server中truncate、delete和drop的异同点

日期: 2008-08-03 作者:sxp03 来源:TechTarget中国 英文

  相同点:


  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,再重新导入/插入数据。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

sxp03
sxp03

相关推荐