SQLite - 如何在保留 child/children 行的同时删除父行?
SQLite - How to delete parent row while keeping the child/children rows?
我理解 PRAGMA foreign_key
和 ON 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;
我想实现这个同时保持子行完整。这可能吗?
编辑
上面的示例将我的问题与 this question 区分开来。示例可能会帮助一些只有在有代码时才能理解的人。
您可以使用 deferred foreign key constraint:
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;
我理解 PRAGMA foreign_key
和 ON 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;
我想实现这个同时保持子行完整。这可能吗?
编辑
上面的示例将我的问题与 this question 区分开来。示例可能会帮助一些只有在有代码时才能理解的人。
您可以使用 deferred foreign key constraint:
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;