我有2张桌子,请查看附件中的图片
PK:PK
FK:FK
Pk表中的P_Id是主键 和FK表中的P_Id是外键。
我需要为PK和FK表的P_Id列中的所有记录添加10(意味着它们需要始终匹配)
我知道在MS SQL中我们可以轻松更新级联,如下所示:
ALTER TABLE FK
ADD CONSTRAINT FK_P_Id
FOREIGN KEY (P_Id)
REFERENCES PK (P_Id) ON UPDATE CASCADE
然后更新PK的行,这将自动更新FK。
update A
set A.P_Id= A.P_Id + 10
from PK A inner join FK B
on A.P_Id = B.P_Id
但是,我不确定它在DB2中是如何工作的......有人可以帮忙吗?
我怎样才能让它发挥作用?
提前致谢 斯瓦特
答案 0 :(得分:3)
--remove you foreign key
ALTER TABLE YOURLIB.FK
drop CONSTRAINT YOURLIB.FK_P_Id;
--update FK table
update YOURLIB.FK
set P_Id=P_Id+10;
--update PK table (force)
update YOURLIB.PK overriding system value
set P_Id=P_Id+10;
--recreate foreign key
ALTER TABLE YOURLIB.FK
ADD CONSTRAINT YOURLIB.FK_P_Id
FOREIGN KEY (P_Id)
REFERENCES YOURLIB.PK (P_Id)
ON DELETE RESTRICT;
--If you id on PK is autoincremented, restart it (here 123456 in example but you must found max of id in your PK table --> select max(p_id) from yourlib.pk)
ALTER TABLE YOURLIB.PK
ALTER COLUMN P_Id
RESTART with 123456;
答案 1 :(得分:0)
你可以修改一个像这样强制的键,只有你更新不创建双值键(例如你的键中已经存在你的键+ 10),否则你必须在更新之前删除主键(危险,小心如果有人正在你的桌子上工作)。好的,你必须删除外键才能做到这一点
update pk f0 overriding system value
set f0.id=f0.id+10
where exists
(
select * from fk f1
where f0.id=f1.id
)
答案 2 :(得分:0)
使用
SET FOREIGN_KEY_CHECKS = 0;
更新两个表;
然后
SET FOREIGN_KEY_CHECKS = 1;