本博客详细讲Delete与truncate的使用区别。
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
500 5000
6 rows selected.
1、删除一条数据不提交:
SQL> delete from totalnum where t2=5000;
1 row deleted.
1》 删除后查询:
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
2》回滚:
SQL> rollback;
Rollback complete.
3》回滚后查询:
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
500 5000
6 rows selected.
2、全部删除:
SQL> delete from totalnum;
6 rows deleted.
1》 删除后查询
SQL> select * from totalnum;
no rows selected
2》回滚:
SQL> rollback;
Rollback complete.
3》回滚后查询:
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
500 5000
6 rows selected.
3、删除并提交任务:
SQL> delete from totalnum where t2=5000;
1 row deleted.
1》提交删除任务:
SQL> commit;
Commit complete.
2》提交后查询:
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
3》回滚:
SQL> rollback;
Rollback complete.
4》回滚后查询:
SQL> select * from totalnum;
T1 T2
---------- ----------
3 12
4 15
5 20
10 100
100 1000
4、Truncate的用法:
SQL> truncate totalnum;
truncate totalnum
*
ERROR at line 1:
ORA-03290: Invalid truncate command - missing CLUSTER or TABLE keyword
以上报错,说明语法错误。
SQL> truncate table totalnum;
Table truncated.
1》删除后查询:
SQL> select * from totalnum;
no rows selected
2》回滚:
SQL> rollback;
Rollback complete.
3》回滚后查询:
SQL> select * from totalnum;
no rows selected
以上的一系列测试表明:delete语句删除后的数据会被储存到撤销表空间中,可以进行数据撤销。只有删除后,并提交删除任务
commit操作后,数据不放回撤销表空间。而truncate在删除数据时,在进行删除操作的同时,也进行了commit操作。删除后的数
据不放回撤销表空间,是彻底删除了,而且是整张表的数据删除。delete可以进行选择性删除,所以在进行操作删除的动作之前,
要考虑清楚,应该用哪一个语句进行删除,两个语句各有各的优点与缺点。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2125881/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31392094/viewspace-2125881/