【发布时间】:2022-07-21 21:19:07
【问题描述】:
有下表:
CREATE TABLE "table2" (
"field1" INTEGER NOT NULL,
"field2" BLOB NOT NULL,
"oldInfo" INTEGER NOT NULL CHECK("oldInfo" >= 0 AND "oldInfo" <= 1), --0 means False, 1 means True
FOREIGN KEY("field1") REFERENCES "table1"("field1"),
PRIMARY KEY("field1","oldInfo")
);
我有以下用例(“oldInfo”字段将始终设置为零):
-
第一次插入该对 (field1, oldInfo)。
-
对 (field1, oldInfo) 的第二次插入。由于复合键,在插入新行之前,现有的 oldInfo 字段应设置为 1。
-
对 (field1, oldInfo) 的第三次和后续插入。应删除 oldInfo 为 1 的 field1 的行,然后将 oldInfo 为 0 的 field1 的行修改为将 oldInfo 设置为 1,这一切都在插入新行之前。
我可以在一个查询中使用标准 SQL 而不使用触发器吗?
我现在使用的是 sqlite3,但我希望有适用于每个 DBMS 的查询。
一次只有一个进程可以访问数据库,没有并发。
【问题讨论】:
标签: sql