如何更新具有外键限制的两个表的行

H35*_*5am 0 sql postgresql

我有两个表:一个是外部引用表让我们说表a和另一个是数据表让我们说表b.现在,当我需要更改表b中的数据时,我受到表a的限制.如何在不收到此消息的情况下更改两个表中的"rid"?

"错误:在表上插入或更新"表a"违反外键约束"fk_boo_kid"SQL状态:23503

细节:表(表b)中不存在键(kid)=(110).

用于更新两个表的示例查询:

UPDATE table b table a SET rid = 110 WHERE rid =1
Run Code Online (Sandbox Code Playgroud)
table b 
+-----+-------+-------+
| rid | ride  | qunta |
+-----+-------+-------+
|   1 |  car  |     1 |
|   2 |  bike |     1 |
+-----+-------+-------+  

table a
+-----+-----+------------+
| kid | rid |    date    |
+-----+-----+------------+
|   1 |   1 | 20-12-2015 |
|   2 |   2 | 20-12-2015 |
+-----+-----+------------+

a_h*_*ame 10

在Postgres中,您可以使用可写CTE在单个语句中更新两个表.

假设这个表设置:

create table a (rid integer primary key, ride text, qunta integer);
create table b (kid integer primary key, rid integer references a, date date);
Run Code Online (Sandbox Code Playgroud)

CTE将是:

with new_a as (
  update a 
    set rid = 110
  where rid = 1
)
update b 
  set rid = 110 
where rid = 1;
Run Code Online (Sandbox Code Playgroud)

由于(不可延迟的)外键在语句级别上进行评估,并且主键和外键都在同一语句中进行了更改,因此可以正常工作.

SQLFiddle:http://sqlfiddle.com/#!15/db6d1/1