SQLite的 - 如何删除父行,同时保持孩子/孩子行?(SQLite - How to delet

2019-10-22 11:07发布

我理解的概念PRAGMA foreign_keyON DELETE RESTRICT/NO ACTION ,但我面临着别样的情况。

我需要删除父行,但保持与它相关的子行。 例如:

CREATE TABLE A(id, name);
INSERT INTO A(id, name) VALUES (1, "Loreum");

CREATE TABLE B(id, id_A, name) FOREIGN KEY(id_A) REFERENCES A(id);
INSERT INTO B(id, id_A, name) VALUES (1, 1, "Opium");
DELETE FROM A WHERE id = 1;

我要做到这一点,同时保持子行完好无损 。 这是可能的呢?

编辑

上面的例子,从分开我的问题这个问题 。 例如可能帮助一些人,当有代码谁才明白。

Answer 1:

你可以用一个做到这一点的递延外键约束 :

PRAGMA foreign_keys = on;
CREATE TABLE A(id PRIMARY KEY, name);
INSERT INTO A(id, name) VALUES (1, "Loreum");
CREATE TABLE B(id, id_A, name, FOREIGN KEY(id_A) REFERENCES A(id) DEFERRABLE INITIALLY DEFERRED);
INSERT INTO B(id, id_A, name) VALUES (1, 1, "Opium");

BEGIN;
DELETE FROM A WHERE id = 1;
INSERT INTO A(id, name) VALUES (1, "another Loreum");
COMMIT;


文章来源: SQLite - How to delete parent row while keeping the child/children rows?