一、如果既要删除表中的数据也要删除表的结构,请使用droptable语句,其格式如下:
drop table 表名
drop table语句(是DDL语句)有如下特征:
(1)它删除表中所有的数据行和表结构;
(2)它也删除表的所有索引(后续会讲到);
(3)如果没有备份的话,所删除的表无法恢复,Oracle 10g之前版本如果不备份无法恢复,但是Oracle 10g开始提供闪回删除,所以只要不加关键字purge是可以恢复的;
(4)它提交所有的挂起的事物(后续会讲到);
(5)所有基于该表的视图和别名依然保留但已无效;
实战操作:
Step1:登录lisi用户,查看当前用户下的表,如下图:
Step2:删除A表,如下图:
如果这时候查询A表,发现报错,提示不存在,如下图:
【技术提升】通过drop删除表时,从Oracle 10g开始,被删除的表放入回收站,称为闪回删除(flashbackdrop),这样可以恢复被删除的表。如果不想将表放入回收站可以增加一个“purge”。
drop table的完整语法格式:
drop table 表名 [cascade constraints] [purge]
记住:如果两张表之间有外键(约束)关系,那么删除表的时候Oracle要求删除所有具有cascade constrains。
实战操作1:
将之前删除的A表恢复(之前删除口令没加purge关键字),如下图:
查看A表,如下图:
实战操作2:
继续删除A表,不加关键字purge,不彻底删除,如下图:
注意下图中的命令,该命令是查看回收站内容:
发现A表现在在回收站。
【以上几条SQL命令汇总】
(1)SQL > drop table A;————————将表A删除
(2)SQL > select * from cat;——查看当前登录用户存放什么表
(3)SQL > show recyclebin————查看回收站内容
(4)SQL > flashback table A to before drop——将表A从回收站内恢复
对于删除表语法格式droptable 表名 [cascade constraints] [purge]的说明:
其中cascadeconstraints是级联约束,后面会详细讲到,简单说,级联约束就是若A表和B表之间存在级联约束,那么必须把这个级联约束删除,才能删表。对于purge,如果删表时候加这个单词,那么是彻底删除,不进回收站。
二、只要在drop table命令中不加入purge,就可以恢复被删除的表。首先介绍一个数据字典视图user_recyclebin:
实战操作:
Step1:先用select*from user_recyclebin查看被删除的表,如下图:
发现没有,那是因为没删除,现在删除A表,如下图:
Step2:查看被删除的表,如下图:
发现看上去很复杂,现在用命令
select original_name,object_name from user_recycle_bin查看:
其中original_name是原表名(表被删除之前的名字),object_name是该表在回收站里面的名字。
三、清空回收站命令(慎用!清空后无法恢复)
purge recyclebin
四、截断表
当一个表中数据已经不再需要时,可以使用truncatetable语句将它们全部删除掉(截断),其语法格式如下:
truncate table 表名
truncate table有如下特性:
(1)它删除表中所有的数据,但保留表结构;(drop table命令是不保留表结构,简单说,drop是直接把表删除,而truncate是清空表中的数据但是表还在。)
(2)如果没有备份的话,删除的数据行无法恢复;
(3)该语句释放表所占用的磁盘空间。
实战操作:
Step1:查看A表内容,如下图:
Step2:截断A表,如下图:
Step3:查看A表内容,如下图:
发现里面内容没了,所以truncate table A就是将A表内的数据全部清空,但是A表还在,而之前讲的drop table A是将表彻底删除。