sqlite - SQLite-如何在保留子行的同时删除父行?

标签 sqlite foreign-keys

我了解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;


我想在保持子行完整的同时实现这一目标。这有可能吗?

编辑

上面的示例将我的问题与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;

关于sqlite - SQLite-如何在保留子行的同时删除父行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29349122/

相关文章:

java - 我的表没有在 Sqlite 中创建(Toast for dataNotInserted)....下面的代码 fragment

sqlite - 不需要的 SQLite 插入到\bin

sql - 你如何做一个在sqlite中有多个列的IN查询

android - 在 Android 应用程序中,如何显示与另一个表中的信息关联的表中的信息?

sql - Firebird:更改 "anonymous"外键

postgresql - 涉及多个表的外键约束

python - sqlite3 python 添加列和更新值

iphone - 删除 SQLITE 行 UITABLEVIEW

mysql - "n:m"和 "1:n"在数据库设计中的意义

mysql - 主键是否可以由一个表或另一个表确定?