RT: 如下要求
create table A
(
ID NUMBER(22) NOT NULL primary key,
Name varchar2(50),
SortID NUMBER(22)
);
create table B
(
ID NUMBER(22) NOT NULL primary key,
ID1 NUMBER(22),
ID2 NUMBER(22),
constraint FK_ID1_REFE foreign key (ID1) references bmb (ID),
constraint FK_ID2_REFE foreign key (ID2) references bmb (ID)
}
以上两个表,表B中ID1和ID2是表A中的外键
我想表B中的ID1限制为表A中sortID为1时的ID的值,使表B中的ID2 限制为表A中sortID为2时的ID的值 请问能实现吗?
能解答的加分~
关于oracle的外键约束。外键约束能不能加条件?
答案:3 悬赏:0 手机版
解决时间 2021-12-29 06:05
- 提问者网友:相思似海深
- 2021-12-28 21:49
最佳答案
- 五星知识达人网友:蓝房子
- 2021-12-28 22:14
参照完整性约束的外键取值规则:值来源于参照的主键字段,而没有具体限定为哪些值。
外键的取值规则应该是系统定义好的,你的要求是取值之前还要做一个判断,系统显然不能。
你可以尝试使用check约束,但是不知能不能成功。
你试试,
create table B( ID NUMBER(22) NOT NULL primary key, ID1 NUMBER(22) check(id1 in(select id from a where sortid=1)), ID2 NUMBER(22) check(id2 in(select id from a where sortid=2)), constraint FK_ID1_REFE foreign key (ID1) references bmb (ID), constraint FK_ID2_REFE foreign key (ID2) references bmb (ID))
在数据定义语句中的约束使用数据查询语句做约束条件,尝试下吧。
外键的取值规则应该是系统定义好的,你的要求是取值之前还要做一个判断,系统显然不能。
你可以尝试使用check约束,但是不知能不能成功。
你试试,
create table B( ID NUMBER(22) NOT NULL primary key, ID1 NUMBER(22) check(id1 in(select id from a where sortid=1)), ID2 NUMBER(22) check(id2 in(select id from a where sortid=2)), constraint FK_ID1_REFE foreign key (ID1) references bmb (ID), constraint FK_ID2_REFE foreign key (ID2) references bmb (ID))
在数据定义语句中的约束使用数据查询语句做约束条件,尝试下吧。
全部回答
- 1楼网友:鸽屿
- 2021-12-29 01:20
select a.constraint_name 外键名, a.table_name 外键表, b.constraint_name 主键名, b.table_name 关联主键表
from user_constraints a, user_constraints b
where b.table_name='product' and a.constraint_type = 'r' and b.constraint_type = 'p' and a.r_constraint_name = b.constraint_name
- 2楼网友:英雄的欲望
- 2021-12-28 23:47
那就不用了外键约束了,直接将这ID1列值域默认为sortID为1时的ID的值,ID2列值域默认为sortID为2时的ID的值……但是这样必须写触发器,当修改A的SortID值时及时修改B中的ID1和ID2的值,否则会出现更新异常……造成数据不一致
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯