dillonma 2013-07-29 09:47 采纳率: 0%
浏览 2303

oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变

oracle 中修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变?
有如下两张表,表a和表b

表a 结构如下:
ID Name age
1 lisi 18
2 wangwu 21
3 sunliu 34
4 yiliu 24
... ... ...
其中ID字段为表a主键且自增
表b结构如下:
CID CNAME ID
1 aaaaa 1
2 bbbbb 2
3 cccccc 4
4 ddddd 3
其中CID为表b主键,自增;表a中ID与表b中ID主外键关联
现在我想修改表a中的主键字段值,将其都加上10并且表b中的ID字段值也一起改变。
得到的结果是:
表a:
ID Name age
11 lisi 18
12 wangwu 21
13 sunliu 34

14 yiliu 24

表b:
CID CNAME ID
1 aaaaa 11
2 bbbbb 12
3 cccccc 14
4 ddddd 13
请问怎么实现sql语句。。。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-09 14:31
    关注

    为了修改表 a 中的主键字段值并将这些修改反映到表 b 中,您可以使用以下 SQL 语句:

    UPDATE a
    SET a.ID = a.ID + 10
    WHERE a.ID IN (SELECT ID FROM b);
    
    UPDATE b
    SET b.ID = b.ID + 10
    WHERE b.ID IN (SELECT ID FROM a);
    

    请注意,这些语句假定 ID 是表 a 和表 b 中的数字列。


    注意:在这种情况下,您还需要确保 ID 列在表 a 和表 b 中都是唯一的。如果 ID 列不是唯一的,则可能会出现重复数据并导致错误。


    此外,在执行上述操作之前,您还应确保已禁用表 a 和表 b 上的所有外键约束。这将允许您修改主键字段值,而不会触发外键约束。在完成修改后,您还应重新启用这些约束。


    最后,您应该记住在修改表中的主键字段值时,应小心谨慎。这种修改可能会对数据库中的其他对象产生影响,并且可能会破坏数据库的完整性。因此,您应该确保在修改主键字段值之前,您已经认真考虑了所有可能的后果。

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记