这样的外键约束用SQL语句如何表示

xyf_tck 2002-11-01 12:44:02
加精
a表 [id] [char] (10)
[dep] [char] (10)
[birthday] [datetime]
[name] [char] (10)

b表 [id] [char] (10)
[dep] [char] (10)
[birthday] [datetime]
[sal] [int]
如何将b表中id dep birthday合起来作为一个外键约束与a表的id dep birthday联接起来
其中a表的id dep birthday是a表的一个唯一索引,id是a表的主关键字,b表的id dep brithday是b表的一般索引,
说白了就是要建立级连更新,级连删除的关系。

在SQL SERVER中可以这样写
ALTER TABLE [dbo].[b] ADD
CONSTRAINT [FK_b_a] FOREIGN KEY
(
[id],
[dep],
[birthday]
) REFERENCES [dbo].[a] (
[id],
[dep],
[birthday]
) ON DELETE CASCADE ON UPDATE CASCADE

请问在ORACLE中用SQL语句如何写?
...全文
465 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyf_tck 2002-11-07
  • 打赏
  • 举报
回复
问题基本上清楚了,看来还是oracle与sql server之间的区别
起码foreign key只能建立在primary key上这条规则在oracle中是适用的,在sql server中就不一定了.
谢谢各位老兄,特别是KingSunSha(弱水三千)非常感谢.
KingSunSha 2002-11-06
  • 打赏
  • 举报
回复
SQL> create table a
2 (id varchar2(10),
3 dep varchar2(10),
4 birthday date,
5 name varchar2(10),
6 constraint pk_a primary key (id,dep,birthday))
7 /
Table created.

SQL> create table b
2 (id varchar2(10),
3 dep varchar2(10),
4 birthday date,
5 sal number(10))
6 /
Table created.

SQL> alter table b
2 add constraint fk_b_a foreign key (id,dep,birthday)
3 references a (id,dep,birthday)
4 on delete cascade
5 /
Table altered.

没什么问题啊,但是ORACLE中不支持UPDATE CASCADE,至少在8版本中不支持.
双子涂鸦 2002-11-06
  • 打赏
  • 举报
回复
我怎么看着一个id就可以解决问题了
为什么一定要三个字段
而且冗余
单主键关联后再建立一张视图即可轻松解决任何问题
为什么非要这样复杂
xyf_tck 2002-11-06
  • 打赏
  • 举报
回复
有没有人知道这个问题,难道伟大的oracle连这个都搞不定吗,如果一定要用触发器实现,可不可以写出来看看.
xyf_tck 2002-11-04
  • 打赏
  • 举报
回复
to penitent(只取一瓢)
在oracle中我执行以上语句不成功,不知道是什么原因,即使ON DELETE CASCADE ON UPDATE CASCADE 都不写也一样不成功.
penitent 2002-11-01
  • 打赏
  • 举报
回复
ALTER TABLE
USERNAME.USERTABLE1 ADD
(CONSTRAINT "外键名称" FOREIGN KEY(ID,DEP,BIRTHDAY)
REFERENCES
USERNAME.USERTABLE2ID,DEP,BIRTHDAY)
ON DELETE CASCADE)
yuxuan 2002-11-01
  • 打赏
  • 举报
回复
可以用触发器实现
llm06 2002-11-01
  • 打赏
  • 举报
回复
alter table 表名 add constraint fk_b_a foreign key (id,dep,birthday) references 表名(id,dep,birthday)on delete cascade
一样的吗,不过on update cascade有没有我就不清楚了
xyf_tck 2002-11-01
  • 打赏
  • 举报
回复
在SQL SERVER 中 可以在关系图中用拖动的方法建立以上外键约束,只要id drp birthday在主表中是唯一的索引就可以。oracle中也应该是可以的,用.net联后台oracle(8.16)可以在.net中直接修改后台oracle的表结构
,甚至可以修改已存在的字段名,也可以用拖动的方法建立以上要求的外键约束,但是oracle升级为9i以后,.net不支持前台直接修改,所以想请教用SQL语句的写法,请各位帮忙。
BlueChina 2002-11-01
  • 打赏
  • 举报
回复
foreign key只能建立在primary key上

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧