Oracle 中truncate和delete的区别.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle 中truncate和delete的区别

Oracle 中truncate和delete的区别 Oracle中truncate和delete的区别 删除表中的数据的方法有delete,truncate, 它们都是删除表中的数据,而不能删除表结构,delete可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete操作收作删除表,而truncate操作叫作截断表. truncate操作与delete操作对比 操作 回滚 高水线 空间 效率 Truncate 不能 下降 回收 快 delete 可以 不变 不回收 慢 下面分别用实例查看它们的不同 1.回滚 首先要明白两点 1.在oracle中数据删除后还能回滚是因为它把原始数据放到了undo表空间, 2.DML语句使用undo表空间,DDL语句不使用undo,而delete是DML语句,truncate是DDL语句,别外DDL语句是隐式提交. 所以truncate操用不能回滚,而delete操作可以. 两种操作对比(首先新建一个表,并插入数据) SQL create table t 2 ( 3 i number 4 ); Table created. SQL insert into t values(10); SQL commit; Commit complete. SQL select * from t; I ---------- 10 Delete删除,然后回滚 SQL delete from t; 1 row deleted. SQL select * from t; no rows selected #删除后回滚 SQL rollback; Rollback complete. SQL select * from t; I ---------- 10 Truncate截断表,然后回滚. SQL truncate table t; Table truncated. SQL rollback; Rollback complete. SQL select * from t; no rows selected 可见delete删除表还可以回滚,而truncate截断表就不能回滚了.(前提是delete操作没有提交) 2.高水线 所有的Oracle表都有一个容纳数据的上限(很象一个水库历史最高的水位),我们把这个上限称为“high water mark”或HWM。这个HWM是一个标记(专门有一个数据块用来记录高水标记等),用来说明已经有多少数据块分配给这个表. HWM通常增长的幅度为一次5个数据块. delete语句不影响表所占用的数据块, 高水线(high watermark)保持原位置不动 truncate 语句缺省情况下空间释放,除非使用reuse storage; truncate会将高水线复位 下面对两种操作对比 SQL analyze table t estimate statistics; Table analyzed. SQL select segment_name,blocks from dba_segments where segment_name=upper(t); SEGMENT_NAME BLOCKS ------------------------------ ---------- T 24 SQL select table_name,blocks,empty_blocks from user_tables where table_name=upper(t); TABLE_NAME BLOCKS EMPTY_BLOCKS ------------------------------ ---------- ------------ T 20 3 USER_TABLES.BLOCKS列代表该表中曾经使用过得数据库块的数目,即水线。 注意:USER_TABLES.BLOCKS EMPTY_BLOCKS (20+3=23)比DBA_SEGMENTS.BLOCKS少一个数据库块,这是因为有一个数据库块被保留用作表头。DBA_SEGMENTS.BLOCKS表示分配给这个表的所有的数据库块的数目。USER_TABLES.BLOCKS表示已经使用过的数据库块的数目(水线)。 Delete删除表, SQL delete fro

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档