drop table cascade 博客分类: oracle oracledrop table cascade
程序员文章站
2024-03-22 17:11:04
...
建立数据库表之前,第一步,进行了drop table cascade constant 操作,不明白是什么意思,翻看书的前面也没有找到,于是查了一下,以下为查到的原因。
当你要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 wner = '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。