当前位置: 首页 > news >正文

Oracle 基础篇 --- 表删除

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

###2.2 删除表

删除一个表将会删除:

  • 数据
  • 表结构
  • 数据库触发器
  • 相应的索引
  • 关联的对象权限

DROP TABLE 语句的可选子句:

  • CASCADE CONSTRAINTS:相关的引用完整性约束条件
  • PURGE:无法闪回

DROP TABLE 的一些考虑事项:

  • 如果不使用PURGE子句,则表定义、关联索引和触发器会被放置在回收站中。表数据仍存在,但如不使用修改后的表名称就无法访问(将表放在RECYCLEBIN 时表名称发生了更改)。如果使用Enterprise Manager 删除了表,则不需要使用PURGE 子句。
  • 使用FLASHBACK TABLE 命令可从回收站恢复方案对象。PURGE RECYCLEBIN 命令可清空回收站。
  • 需要使用CASCADE CONSTRAINTS 选项才能删除所有相关的引用完整性约束条件。

注: 如果不使用PURGE选项,那么表及表索引所占用的空间仍会计入用户的表空间可用限额中。也就是说,这些空间仍被视为已占用。但是,如果用户已经达到了其限额,则系统会自动从回收站对象中回收空间。

######################删除表######################
SQL> create table emp2 as select * from emp1;

Table created.

SQL> desc emp2;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMP1_ID                                            NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 EMAIL                                     NOT NULL VARCHAR2(25)
 PHONE_NUMBE                                        VARCHAR2(20)
 HIRE_DATE                                 NOT NULL DATE
 JOB_ID                                    NOT NULL VARCHAR2(10)
 SALARY                                             NUMBER(8,2)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
 SCORE                                              NUMBER(3)

SQL> select constraint_name, constraint_type from user_constraints where table_name = 'EMP2';

CONSTRAINT_NAME                C
------------------------------ -
SYS_C0044626                   C
SYS_C0044627                   C
SYS_C0044628                   C
SYS_C0044629                   C

SQL> drop table emp2;

Table dropped.

###查看闪回区
SQL> desc USER_RECYCLEBIN;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OBJECT_NAME                               NOT NULL VARCHAR2(30)
 ORIGINAL_NAME                                      VARCHAR2(32)
 OPERATION                                          VARCHAR2(9)
 TYPE                                               VARCHAR2(25)
 TS_NAME                                            VARCHAR2(30)
 CREATETIME                                         VARCHAR2(19)
 DROPTIME                                           VARCHAR2(19)
 DROPSCN                                            NUMBER
 PARTITION_NAME                                     VARCHAR2(32)
 CAN_UNDROP                                         VARCHAR2(3)
 CAN_PURGE                                          VARCHAR2(3)
 RELATED                                   NOT NULL NUMBER
 BASE_OBJECT                               NOT NULL NUMBER
 PURGE_OBJECT                              NOT NULL NUMBER
 SPACE                                              NUMBER

SQL> select OBJECT_NAME, ORIGINAL_NAME, TYPE from USER_RECYCLEBIN;

OBJECT_NAME                    ORIGINAL_NAME                    TYPE
------------------------------ -------------------------------- -------------------------
BIN$Gccf4DgLkOfgUOAKyMMgAQ==$0 EMP2                             TABLE
BIN$GSvDnQHLJFDgUOAKyMNIWg==$0 TEST01                           TABLE
BIN$GSusjACgDczgUOAKyMNG9Q==$0 TEST03                           TABLE
BIN$GSm4+ZP7c1fgUOAKyMNDdQ==$0 TEST_01                          TABLE
BIN$FyE8rj5stLDgUOAKyMMgiQ==$0 EMP1                             TABLE
BIN$FyE8rj5ntLDgUOAKyMMgiQ==$0 EMPL                             TABLE
BIN$FyE8rj5itLDgUOAKyMMgiQ==$0 EMP1                             TABLE
BIN$FxuyiLIm053gUOAKyMMSgw==$0 EMP1                             TABLE
BIN$/ktf0vegBxjgQOAKyMNg6A==$0 LOCATIONS_DEMO                   TABLE
BIN$/ktf0vefBxjgQOAKyMNg6A==$0 LOC_ID_PK1                       INDEX
BIN$/C1n/wm/Y0jgQOAKyMMSaQ==$0 MY_TALBE                         TABLE

###恢复删掉的表
SQL> flashback table emp2 to before drop;

Flashback complete.

SQL> select constraint_name, constraint_type from user_constraints where table_name = 'EMP2';

CONSTRAINT_NAME                C
------------------------------ -
BIN$Gccf4DgHkOfgUOAKyMMgAQ==$0 C
BIN$Gccf4DgIkOfgUOAKyMMgAQ==$0 C
BIN$Gccf4DgJkOfgUOAKyMMgAQ==$0 C
BIN$Gccf4DgKkOfgUOAKyMMgAQ==$0 C

SQL> select count(*) from emp2;

  COUNT(*)
----------
         1

####################删除表带有purge####################
SQL> drop table emp2 purge;

Table dropped.

SQL> select OBJECT_NAME, ORIGINAL_NAME, TYPE from USER_RECYCLEBIN where ORIGINAL_NAME = 'EMP2';

no rows selected

####################删除表带有cascade constraints####################
create table dep3
(dep1_id number(2) constraint dep1_id_pk primary key,
 dep1_name varchar(10));

insert into dep3 values(1, 'dev');
insert into dep3 values(2, 'qa');

commit; 

create table emp3
(emp3_id number(3) constraint emp3_id_pk primary key,
 emp3_name varchar(10),
 dep_id number(2) constraint sele references dep3(dep1_id)
);

insert into emp3 values(001, 'dev1', 1 );
insert into emp3 values(002, 'qa1', 2);

commit;

SQL> select * from emp3;

   EMP3_ID EMP3_NAME      DEP_ID
---------- ---------- ----------
         1 dev1                1
         2 qa1                 2

SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE from user_constraints where table_name = 'EMP3';

CONSTRAINT_NAME                C
------------------------------ -
EMP3_ID_PK                     P
DEP_ID_FK                      R
		 

SQL> drop table dep3;
drop table dep3
           *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys

SQL> alter table emp3
  2  disable novalidate constraint dep_id_fk;

Table altered.

SQL> drop table dep3;
drop table dep3
           *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys

#需要使用CASCADE CONSTRAINTS 选项才能删除所有相关的引用完整性约束条件。
SQL> drop table dep3 cascade constraints;

Table dropped.

SQL> select * from emp3;

   EMP3_ID EMP3_NAME      DEP_ID
---------- ---------- ----------
         1 dev1                1
         2 qa1                 2

SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE from user_constraints where table_name = 'EMP3';

CONSTRAINT_NAME                C
------------------------------ -
EMP3_ID_PK                     P


#添加外键约束
SQL> alter table emp3
  2  add constraint emp3_id_fk foreign key (dep_id) references dep3(dep1_id);

Table altered.

SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE from user_constraints where table_name = 'EMP3';

CONSTRAINT_NAME                C
------------------------------ -
EMP3_ID_PK                     P
EMP3_ID_FK                     R


截断表

  • 截断表时会删除数据并释放已用空间。
  • 会截断相应的索引。
  • 通过将高水位标记(HWM)设置到表开头,将表标记为空,从而使表行不可用。
  • 由于TRUNCATE TABLE 是DDL 命令,因此不会生成还原数据,而且会隐式提交命令。
  • 不会截断外键引用的表。
  • 使用此命令时不会触发删除触发器。

注: 要删除所有表行,这种方式通常比发出DELETE 语句的速度要快很多倍,原因如下:

  • Oracle DB 重置表的HWM,而不是象DELETE 一样处理每行。
  • 不生成还原数据。
####Truncate表
SQL> truncate table dep3 ;
truncate table dep3
               *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys

#根据表来查看引用外键的表
SELECT uc.constraint_name,
       uc.constraint_type,
       uc.table_name,
       uc.r_constraint_name
  FROM user_constraints uc, user_cons_columns ucc
 WHERE UC.R_CONSTRAINT_NAME = UCC.CONSTRAINT_NAME AND UCC.TABLE_NAME = 'DEP3';

CONSTRAINT_NAME      C TABLE_NAME      R_CONSTRAINT_NAME
-------------------- - --------------- --------------------
EMP3_ID_FK           R EMP3            DEP1_ID_PK

#禁用掉外键
SQL> alter table emp3
  2  disable novalidate constraint emp3_id_fk;

Table altered.

SQL> truncate table emp3;

Table truncated.

转载于:https://my.oschina.net/wangbinbin0326/blog/472943

相关文章:

  • IE 8 或者 IE 9 多标签设置
  • C# 关闭显示器(显示)
  • 一周学会Mootools 1.4中文教程:(4)类型
  • python 点滴记录13:django 初尝试
  • 电子病历的重要性和意义1 hiscookbook.电子病历.电子病历重要性和意义
  • How Much Did It Rain? Winner's Interview: 1st place, Devin Anzelmo
  • 解决使用Ajax时浏览器的缓存问题
  • 为什么一直都下不定决心跳槽
  • 软件测试
  • UML类图关系大全
  • Velocity魔法堂系列一:入门示例(转)
  • [C#]科学计数法(scientific notation)显示为正常数字
  • Hibernate学习之hibernate.cfg.xml
  • crond相关配置
  • Bing Maps开发扩展:Oracle Spatial的空间数据渲染
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • javascript 哈希表
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • KMP算法及优化
  • Redash本地开发环境搭建
  • redis学习笔记(三):列表、集合、有序集合
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • ViewService——一种保证客户端与服务端同步的方法
  • 复习Javascript专题(四):js中的深浅拷贝
  • 后端_ThinkPHP5
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 智能合约Solidity教程-事件和日志(一)
  • Hibernate主键生成策略及选择
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # include “ “ 和 # include < >两者的区别
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (论文阅读40-45)图像描述1
  • (十)T检验-第一部分
  • (四)汇编语言——简单程序
  • (转) ns2/nam与nam实现相关的文件
  • (转)c++ std::pair 与 std::make
  • (转)原始图像数据和PDF中的图像数据
  • (转载)hibernate缓存
  • **PHP分步表单提交思路(分页表单提交)
  • 、写入Shellcode到注册表上线
  • .NET Core引入性能分析引导优化
  • [] 与 [[]], -gt 与 > 的比较
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [C#]扩展方法
  • [Design Pattern] 工厂方法模式
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解
  • [Labtools 27-1429] XML parser encountered a problem in file