【问题标题】:How can we update an column with Foreign key constraint in DB2?我们如何在 DB2 中更新具有外键约束的列?
【发布时间】:2016-12-03 19:55:52
【问题描述】:

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

我怎样才能让它工作?

提前致谢 特警

【问题讨论】:

    标签: database db2 db2-400


    【解决方案1】:

    使用

    SET FOREIGN_KEY_CHECKS = 0;
    

    更新两个表;

    然后

    SET FOREIGN_KEY_CHECKS = 1;
    

    【讨论】:

    • OP 请求 Db2,这看起来像 MySQL
    【解决方案2】:
    --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;
    

    【讨论】:

      【解决方案3】:

      你可以修改一个键来强制这样,只有当你更新不创建双值键(例如你的键 + 10 已经存在于你的表中),否则你必须在更新之前删除主键(危险,小心如果有人在你的桌子上工作)。好的当然你必须删除外键才能做到这一点

      update pk f0 overriding system value
      set f0.id=f0.id+10
      where exists 
      (
          select * from fk f1
          where f0.id=f1.id
      )
      

      【讨论】:

      • 您好,我无法删除外键!有什么办法可以级联或触发它?就像我在 SQL 中写的那样
      • 在 fk 表中保存你的行,在你的 fk 表中删除行,更新你的表 pk,更新你的保存,将你的保存插入到你的 fk 表中
      • 您能用查询解释一下吗?我是 db2 的新手
      • 看我的第二个答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多