SQL> create table t1
2 ( i int,
3 a int
4 );
表已创建。
SQL> insert into t1 values (2,3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> insert into t1 values (3,4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from t1;
I A
---------- ----------
2 3
3 4
SQL> delete t1;
已删除2行。
SQL> desc t1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
I NUMBER(38)
A NUMBER(38)
SQL> rollback;
回退已完成。
SQL> select * from t1;
I A
---------- ----------
2 3
3 4
SQL> delete t1 where i=3;
已删除 1 行。
SQL> select * from t1;
I A
---------- ----------
2 3
SQL> rollback;
回退已完成。
SQL> select * from t1;
I A
---------- ----------
2 3
3 4
SQL> delete t1 where i=3;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select * from t1;
I A
---------- ----------
2 3
SQL> rollback;
回退已完成。
SQL> select * from t1;
I A
---------- ----------
2 3
SQL> select * from t1;
I A
---------- ----------
2 3
SQL> insert into t1 values (3,4);
已创建 1 行。
SQL> select * from t1;
I A
---------- ----------
2 3
3 4
SQL> truncate t1;
truncate t1
*
第 1 行出现错误:
ORA-03290: 无效的截断命令 - 缺失 CLUSTER 或 TABLE 关键字
SQL> truncate table t1;
表被截断。
SQL> desc t1;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
I NUMBER(38)
A NUMBER(38)
SQL> rollback;
回退已完成。
SQL> select * from t1;
未选定行
实验结果:truncate 是DDL语句,自带隐式commit,不可rollback,而delete 在没有commit的前提下是可以进行回滚的。
|
操作 |
回滚 |
高水线 |
空间 |
效率 |
|
Truncate |
不能 |
下降 |
回收 |
快 |
|
delete |
可以 |
不变 |
不回收 |
慢 |