【问题标题】:SQL without triggers: one query for all the usecases没有触发器的 SQL:一个查询所有用例
【发布时间】: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”字段将始终设置为零):

  1. 第一次插入该对 (field1, oldInfo)。

  2. 对 (field1, oldInfo) 的第二次插入。由于复合键,在插入新行之前,现有的 oldInfo 字段应设置为 1。

  3. 对 (field1, oldInfo) 的第三次和后续插入。应删除 oldInfo 为 1 的 field1 的行,然后将 oldInfo 为 0 的 field1 的行修改为将 oldInfo 设置为 1,这一切都在插入新行之前。

我可以在一个查询中使用标准 SQL 而不使用触发器吗?

我现在使用的是 sqlite3,但我希望有适用于每个 DBMS 的查询。

一次只有一个进程可以访问数据库,没有并发。

【问题讨论】:

    标签: sql


    【解决方案1】:

    如果您想在数据库级别执行此操作,则必须在触发器中执行或通过函数/过程执行。

    否则您必须在应用程序级别执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2020-07-27
      相关资源
      最近更新 更多