ORACLE中DROP、TRUNCATE和DELETE的区别

1、TRAUNCAT TABLE A;

       ————清空A表,并且释放A表清空之前占用内存;

       ————TRUNCATE是一个DDL语言,执行之后自动提交事物,执行之后无法回滚。

       ————只有表格创建者,或者相关权限者才能执行此操作。

       ————执行速度快于DELETE;

       ————执行之后将重新设置高水位线(高水位线,High Water Mark,内存空间上限,Oracle中每个分区segment——也就是                          内存空间,都有一个上限。当表占用空间超过上限,高水位线会增大,而且这个值只会增大,不会减小,当执行                                  DELETE时,虽然清楚了数据,但是HWM的值不会变,但是当执行TRUNCAT时,HWM会置为0);

       ————执行TRUNCATE之后再次操作表,速度会变快,因为HWM重置,不需要全表扫描很大的空间;

       ————当TRUNCATE表,表的所有索引被重置,进行查询操作速度会变快;

       ————当TRUNCATE会重置标识计数值,DELETE不会;

       ————当TRUNCATE会重置自增主键(Sequence键),从1开始,DELETE不会,这都是DDL性质决定的;

2、DELETE TABLE A;

       ————清空A表,不能释放A表清空之前占用内存;

       ————DELETE是DML语言,执行之后需要手动提交事物,执行之后可以回滚。

       ————执行DELETE之后再次操作表,速度不会变快,因为HWM没有重置,仍需要全表扫描很大的空间;

       ————当DELETE表,表的所有索引不会被重置,进行查询操作速度不会变快;

       ————当DELETE可以按条件删除,TRUNCATE不可以;

3、DROP TABLE A;

       ————DROP是DDL语句,隐式COMMIT,不能回滚;

       ————清除表结构,清除表空间,TRUNCATE和DELETE不会;

       ————DROP会清除该表所有的约束,触发器,索引等等;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章