永发信息网

关于oracle的外键约束。外键约束能不能加条件?

答案:3  悬赏:0  手机版
解决时间 2021-12-29 06:05
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的值 请问能实现吗?
能解答的加分~
最佳答案
参照完整性约束的外键取值规则:值来源于参照的主键字段,而没有具体限定为哪些值。

外键的取值规则应该是系统定义好的,你的要求是取值之前还要做一个判断,系统显然不能。

你可以尝试使用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))

在数据定义语句中的约束使用数据查询语句做约束条件,尝试下吧。
全部回答
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
那就不用了外键约束了,直接将这ID1列值域默认为sortID为1时的ID的值,ID2列值域默认为sortID为2时的ID的值……但是这样必须写触发器,当修改A的SortID值时及时修改B中的ID1和ID2的值,否则会出现更新异常……造成数据不一致
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
TCP头部窗口是16bit,序号却是32bit,为什么
永远的灯光阅读答案
深圳哪里学散打比较好呢?
做梦梦到棺材和死人
下列有关化学观念的叙述正确的是A.吃鱼后,鱼
行车维修及故障排除
可奈何什么意思
喝茶能有补充水分的作用吗?
逆战迎新解锁卡是什么
带有胜利着个词的句子
well prepared you are, you still need a lo
0-2³÷(-4)³-1/8 要过程谢谢
适合学生用又潮的书包有哪些牌子?
韩文好好保护自己好吗?怎么写
有什么办法进别人空间
推荐资讯
帮忙取一个 钱姓四个字的 男孩名字
你好,自考如何转省考,需要重新报名吗?
试评价后羿这个形象
单选题对健康的情绪,认识错误的是A.健康的情
没有备份手机重置后能恢复照片吗
延安市实验中学招生咨询电话是?
十万个冷笑话2电影百度云 急!!
20元钱能做什么?啊
如何除掉磨砂鼠标上的污渍
1000元越南币等于多少人民币 – 手机爱问
保时捷中心地址好找么,我有些事要过去,
润滑油都有哪些牌子
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?