我们如何更新 DB2 中具有外键约束的列?

How can we update an column with Foreign key constraint in DB2?

我有2张桌子,请检查附件

PK:PK

FK: FK

Pk中的

P_Id table是主键 FK table 中的 P_Id 是外键。

我需要在 PK 和 FK P_Id 列中的所有记录中添加 10 table(意味着它们需要始终匹配)

我知道在 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 中是如何工作的。有人可以帮忙吗?

我怎样才能让它工作?

提前致谢 特警

你可以像这样修改一个键来强制,只有当你更新时不要创建双值键(例如你的键+10已经存在于你的table),否则你必须在更新前删除主键(危险,如果有人在处理您的 table,请小心)。好的,当然你必须删除外键才能做到这一点

update pk f0 overriding system value
set f0.id=f0.id+10
where exists 
(
    select * from fk f1
    where f0.id=f1.id
)
--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;

使用

SET FOREIGN_KEY_CHECKS = 0;

更新两个表;

然后

SET FOREIGN_KEY_CHECKS = 1;