我们如何更新 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;
我有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;