失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > oracle 建立外键 引用条件约束 不能添加 Oracle外键约束

oracle 建立外键 引用条件约束 不能添加 Oracle外键约束

时间:2019-12-07 18:23:04

相关推荐

oracle 建立外键 引用条件约束 不能添加 Oracle外键约束

一、创建外键约束

两种方法

1.创建表时

create table 子表(

id number,

name varchar2(5),

foreign key(id) references 父表(列名)

);

2.随时更改

alter table 子表 drop constraint 约束名;

alter table 子表 add constraint 约束名 foreing key(外键) conferences 父表(列名) ;

二、进一步理解

外键只接受两种值,一是父表中的外键值,二是NULL

创建外键时可以指定级联操作:

在添加外键约束时,还可以指定级联操作的类型,主要用于确定当删除父表中的一条记录时,如何处理子表中的外键字段。

1.CASCADE:删除父表中的被引用列的数据时,级联删除子表中相应的数据行

2.SET NULL:删除父表中的被引用列的数据时,将子表中相应引用列的值设置为NULL。要求子表中相应引用列支持NULL

3.NO ACTION:默认为此操作。删除父表中的被引用列的数据时,如果子表中的引用列中包含该值,则禁止该操作执行。(注意:执行delete 父表也不会报错,子表中的数据不会被删除)

注意:级联操作允许删除/更新多条数据!

三、实际例子

create table a_1 (id number);

create table b_1(id number, id_a_1 number);

alter table a_1 add constraint pk_a_1 primary key(id);

alter table b_1 add constraint fk_b_1 foreing key(id_a_1) references a_1(id) on delete cascade;

a_1表中增加数据:1,2

b_1表中增加数据:

11,1

1111,1

22,2

delete from a_1 where id=1; 执行delete语句后:

a_1表中删除一条数据,b_1表中删除两条数据。

说明:无论是cascade或是set null,都允许删除子表中多条相应的数据 或 将子表中多条相应的数据置为NULL

四、相关问题说明

1. 给b_1表中添加主键时,引用的a_1表中的字段必须为主键或唯一键。否则报ORA-02270:此列列表的唯一关键字或主键不匹配

2. 如果外键已经存在,再次添加相同外键的话,报ORA-02275:此表中已经存在这样的引用约束条件

3. 如果主键已经存在,再次添加相同主键的话,报ORA-02260:表只能具有一个主键

另外,即使添加外键的语句中声明级联操作为cascade,truncate语句执行依旧报ORA-02266

《ORA-02266 / 有外键依赖时truncate table》/shafatutu/article/details/95898186

如果觉得《oracle 建立外键 引用条件约束 不能添加 Oracle外键约束》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。