当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行.。一个极简单的例子,例如你有一个员工基本资料表,上面可能有员工编号和员工姓名等字段,另外有一个员工销售表,上面有员工编号和员工销售额两个字段,员工薪资表的员工编号字段为一个foreign key参照到员工基本资料表的员工编号:

SQL> drop table t;

Table dropped.

SQL> drop table t1;

Table dropped.

SQL> create table t (id number,name varchar2(20));

Table created.

SQL> create table t1 (id number,sal number);

 

Table created.

SQL> alter table t add constraint t_pk primary key (id);

Table altered.

SQL> alter table t1 add constraint t_fk foreign key (id) references t (id);

Table altered.

SQL> insert into t values (1,'JACK');

1 row created.

SQL> insert into t values (2,'MARY');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> insert into t1 values (1,1000);

1 row created.

SQL> insert into t1 values (2,1500);

1 row created.

SQL> commit;

SQL> insert into t1 values (3,200); 
insert into t1 values (3,200) 

ERROR at line 1: 
ORA-02291: integrity constraint (SYS.T_FK) violated - parent key not found

(違反了constraint,員工基本資料表根本沒有3號這個員工,何來的銷售紀錄。)

SQL> drop table t; 
drop table t 

ERROR at line 1: 
ORA-02449: unique/primary keys in table referenced by foreign keys

(违反了constraint,员工销售表t1有參照到table t,这个reference relation不允许你drop table t)

SQL> drop table t cascade constraints;

Table dropped.

SQL> select * from t1;

ID SAL 
---------- ---------- 
1 1000 
2 1500

SQL> select CONSTRAINT_NAME,TABLE_NAME from dba_constraints where owner = 'SYS' and TABLE_NAME = 'T1'

no rows selected

SQL>

我们可以发现利用Drop table cascade constraints可以以刪除关联table t的constraint來达成你drop table t的目的,原來属于t1的foreign key constraint已经跟随着被删除掉了,但是,储存在table t1的资料可不会被删除,也就是说Drop table cascade constraints 是不影响到存储于objec里的row data。

ORACLE中Drop table cascade constraints之后果.的更多相关文章

  1. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键

    1.关于 cascade constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键). 则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误 ...

  2. oracle中drop、delete和truncate的区别

    oracle中drop.delete和truncate的区别 oracle中可以使用drop.delete和truncate三个命令来删除数据库中的表,网上有许多文章和教程专门讲解了它们之间的异同,我 ...

  3. Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题

    转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: ...

  4. Oracle中drop user和drop user cascade的区别

    drop user : 仅仅是删除用户,drop user username cascade :会删除此用户名下的所有表和视图. userSpecify the user to be dropped. ...

  5. Oracle中IS TABLE OF的使用

    IS TABLE OF :指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型. INDEX BY BINARY_INTEGER:指索引组织类型 BULK COLLECT :指是 ...

  6. (转)Oracle 在Drop表时的Cascade Constraints

    Oracle 在Drop表时的Cascade Constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键).则当删除A表时,如不特殊说明,则 drop table  ...

  7. Oracle 在Drop表时的Cascade Constraints

    http://hi.baidu.com/rebooo/item/12b500b130022bf263388e69假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键).则当删除A表时 ...

  8. Oracle中 HWM与数据库性能的探讨

    链接:http://www.eygle.com/archives/2011/11/oracle_hwm_tuning.html 本文讨论的是oracle中关于table的HWM的内容,主要包括这样几个 ...

  9. 向oracle中的表插入数据的方法

    向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:s ...

随机推荐

  1. Eclipse------如何将项目通过maven编译并打包

    1.右击项目>>>点击Debug As>>>点击 Maven install进行编译,编译成功后入图 2.右击项目>>>点击Debug As> ...

  2. Hibernate_day01讲义_使用Hibernate完成对CRM系统中客户管理的DAO中的CRUD的操作

  3. windows C 設置控制臺文本輸出的顏色(可用作調試使用)

    #include <windows.h> #define RED 0x0004 #define GREEN 0x0002 #define BLUE 0x0001 #define WHITE ...

  4. java中类相关注意事项

    下面default类就是默认修饰符的类 1.Java中调用类中属性或方法(不管是否静态属性或方法)都要在类的方法中调用,虽然这个太基础,但今天想在类中调用静态类的静态变量,不能调用: 2.Java调用 ...

  5. 文件完整性hash验证demo(python脚本)

    一个简单的文件完整性hash验证脚本 #!/usr/bin/env python # -*- coding: utf- -*- import os import hashlib import json ...

  6. 关于 g++ 编译器

    g++由自由软件基金发行,g++是基于类unix的c++编译器,通常在命令行运行.它一般附带于类Unix系统中,因此如果你正在运行Unix或Linux系统,它很可能已经存在于你的系统中.你可以对一个源 ...

  7. butterknife用法总结

  8. error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

    更新的软件可以解决 TortoiseGit-preview-2.5.7.0-20180127-b2d00f8-64bit.msi和Git-2.16.2-64-bit.exe. 链接地址为: https ...

  9. JTAG、JLink、ULINK、ST-LINK仿真器区别(转)

    首先要了解一下JTAG. JTAG协议 JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试.现在多数 ...

  10. iOS添加自定义字体

    字体有相应的字体文件,一般是以ttf或者otf为后缀,我们可以去一些第三方网站去下载(也有人专门做了字体出售),Google Fonts是个比较好的网站,可以去找找看.我们就用Open Sans这个字 ...