gpt4 book ai didi

sql - Oracle中存在子记录时是否可以修改记录主键的值?

转载 作者:行者123 更新时间:2023-12-01 19:37:07 24 4
gpt4 key购买 nike

我有一些表示父子关系的 Oracle 表。它们看起来像这样:

create table Parent (
parent_id varchar2(20) not null primary key
);

create table Child (
child_id number not null primary key,
parent_id varchar2(20) not null,

constraint fk_parent_id
foreign key (parent_id)
references Parent (parent_id)
);

这是一个实时数据库,其架构是很久以前设计的,假设 parent_id 字段对于给定记录来说是静态且不变的。现在规则已更改,我们确实希望更改某些记录的 parent_id 值。

例如,我有这些记录:

Parent:

parent_id
---------
ABC123


Child:

child_id parent_id
-------- ---------
1 ABC123
2 ABC123

我想将两个表中这些记录中的 ABC123 修改为其他内容。

据我了解,无法编写同时更新父表和子表的 Oracle 更新语句,并且考虑到 FK 约束,我不确定如何最好地更新我的数据库。我目前正在禁用 fk_parent_id 约束,独立更新每个表,然后启用该约束。

是否有更好的单步方法来更新此内容?

最佳答案

没有级联更新。

您可以使用deferrable constraint .

或者,在事务中:

  • 使用新键将父级复制到新行:

    插入父项(键、列...)选择新键,列...来自家长WHERE key = 旧 key

  • 分配所有子项:

    更新子项设置parent_id = newkeyWHEREparent_id = 旧 key

  • 由于没有人引用它,因此删除父级:

    删除来自家长WHERE key = 旧 key

参见this link .

关于sql - Oracle中存在子记录时是否可以修改记录主键的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2877540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com