有表1:
CREATE TABLE table1
(
id serial NOT NULL,
CONSTRAINT pk_table1_id PRIMARY KEY (id),
)
有表2:
CREATE TABLE table2
(
id serial NOT NULL,
fk_1 integer,
CONSTRAINT fk_to_table1 FOREIGN KEY (fk_1)
REFERENCES table1 (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION
NOT VALID
)
当我尝试从 table1 中删除一些行时出现异常:
UPDATE or DELETE in the table "table1" violates the foreign key constraint "fk_to_table1" of the table "table2"
如果删除了带有来自 table1 的外键的行,是否有一些方法可以在 table2 中保留(保存)fk_1 中具有相同值的行(来自 table1 的 id)?
例子: 表一:
id
1
2
3
表 2:
id fk_1
1 | 1
2 | 1
3 | 3
4 | 2
从表 1 中删除第一行后我想看到的内容:
表 1:
id
2
3
表 2:
id fk_1
1 | 1
2 | 1
3 | 3
4 | 2
最佳答案
您可以使用 ON DELETE SET NULL
来做到这一点:
CREATE TABLE table2
(
id int NOT NULL,
fk_1 integer,
CONSTRAINT fk_to_table1 FOREIGN KEY (fk_1)
REFERENCES table1 (id)
ON UPDATE CASCADE
ON DELETE SET NULL
);
insert into table1 values (1), (2);
insert into table2 values (1,1), (2,1), (3,2), (4,2);
然后如果你运行:
delete from table1
where id = 1;
表 2 将如下所示:
id | fk_1
---+-----
1 |
2 |
3 | 2
4 | 2
关于postgresql - 如果删除了具有外键的行,如何在表中保留具有外键值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023171/