create table t1 (id number(2),t2_id number(2));
create table t2 (id number(2));
insert into t1 values (1,1);
insert into t1 values (2,1);
insert into t1 values (3,2);
insert into t1 values (4,2);
insert into t2 values (1);
insert into t2 values (2);
ALTER TABLE t2 ADD constraint t2_id_pk PRIMARY KEY (id);
开始实验:
1、t1表创建了外键约束后,t2_id所能插入的值被限制了。这是约束的作用。
2、t2的内容能否删除,以及删除后的效果取决于,创建约束时的语法。
a.t2的内容不能删除
alter table t1 add constraint
t2_id_outtable_t2_id_fk
foreign key (t2_id)
references t2(id);
尝试删除
delete from t2 where id=1;
报错
ORA-02292: integrity constraint (CDE.T2_ID_OUTTABLE_T2_ID_FK) violated - child record found
b.t2的内容能删除,t1对应行变为空
alter table t1 add constraint
t2_id_fk_afterdel2null
foreign key (t2_id)
references t2(id) on delete set null;
尝试删除
delete from t2 where id=1;
(没有报错)
select * from t1;
ID T2_ID
---------- ----------
1
2
3 2
4 2
c.t2的内容能删除,t1对应行也被删除
alter table t1 add constraint
t2_id_fk_afterdel2del
foreign key (t2_id)
references t2(id) on delete cascade;
尝试删除
delete from t2 where id=1;
(没有报错)
select * from t1;
ID T2_ID
---------- ----------
3 2
4 2