怎样实现外键级联更新?

njhart2003 2005-07-29 10:58:11
有主外键关系的表,若主表的主键更新了,有没有什么语句能使各个子表的外键也随之更新?

举例如下:
SQL> create table t1(c integer,d integer,constraint pk_t1 primary key (c));

表已创建。

SQL> create table t2(c integer,d integer,constraint fk_t2 foreign key (c)
references t1(c) on delete cascade);

表已创建。

SQL> begin
2 for x in 1..5 loop
3 insert into t1 values(x,x+8);
4 insert into t2 values(x,x+16);
5 end loop;
6 commit;
7 end;
8 /

PL/SQL 过程已成功完成。

SQL> select * from t1;

C D
---------- ----------
1 9
2 10
3 11
4 12
5 13

已选择5行。

SQL> select * from t2;

C D
---------- ----------
1 17
2 18
3 19
4 20
5 21

已选择5行。

SQL> update t1 set c=6 where c=5;
update t1 set c=6 where c=5
*
ERROR 位于第 1 行:
ORA-02292: 违反完整约束条件 (CHENNAN.FK_T2) - 已找到子记录日志

.....
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
njhart2003 2005-08-01
  • 打赏
  • 举报
回复
有不同意见的吗?
njhart2003 2005-07-29
  • 打赏
  • 举报
回复
不通过触发器,能否实现子表的级联更新?
bobfang 2005-07-29
  • 打赏
  • 举报
回复
可以将约束定义为DEFERRABLE Constraints,然后在触发器中对从表修改。DEFERRABLE Constraints表示在事务未提交前不检查约束。
bobfang 2005-07-29
  • 打赏
  • 举报
回复
应该不行吧。至少到目前为止没看见手册中介绍过。
njhart2003 2005-07-29
  • 打赏
  • 举报
回复
不通过触发器,能否实现主表的主键改变,子表的外键相应改变....

17,086

社区成员

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

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