0

我有一个带有自然键的表和另一个带有外键约束的表:

create table A
(
    id varchar(255) not null primary key
    ...
)

create table B
(
    a_id varchar(255) not null
    ...

    foreign key (a_id) references A (id)
)

我想在A.id, 上执行转换(在这种特定情况下将其小写)并同时在B.a_id.

显然,如果我这样做:

update A set id=lower(id);
update B set a_id=lower(a_id);

比我第一次更新时会违反外键约束。

无论如何“同时”执行这两个更新,或者你能推荐另一种方法来处理这个问题吗?

4

2 回答 2

0

最简单的方法可能是放弃约束,

执行更新查询

再次,引入外键约束。

于 2012-10-17T04:55:14.513 回答
0

删除约束并使用 ON UPDATE CASCADE 重新创建约束

然后在父表上执行更新语句,不会修改子表。

 ALTER  TTABLE b ADD CONSTARINT fk_const 
 FOREIGN KEY(a_id) REFERENCE  a (id) ON UPDATE CASCADE 

现在执行此更新

 update A set id=lower(id);
于 2012-10-17T05:25:29.937 回答