我有两个表:一个是外部引用表让我们说表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
| 归档时间: |
|
| 查看次数: |
4538 次 |
| 最近记录: |