条件SQLite检查约束?

Rez*_*zie 30 sql sqlite constraints

我有一个由以下SQL定义的表:

CREATE TABLE test (
  id       integer PRIMARY KEY NOT NULL UNIQUE,
  status   text NOT NULL,
  enddate  date,
  /* Checks */
  CHECK (status IN ("Current", "Complete"))
);
Run Code Online (Sandbox Code Playgroud)

我想补充一点,需要约束enddate为非空status是"完成".

这可能吗?我使用的是SQLite v3.6.16.

And*_*mar 42

怎么样:

CHECK (status = "Current" or (status = "Complete" and enddate is not null))
Run Code Online (Sandbox Code Playgroud)

  • 当约束变得非常复杂时,该方法通常是在表的前面放置一个层来强制执行它.像存储过程层或数据访问库一样. (7认同)
  • 谢谢,这很有效.这是唯一的方法吗?将来我可能会有更多的状态,支票可能会变得非常大. (4认同)
  • 好吧,SQLite当前不支持存储的proc,因此要实现它的唯一方法是具有触发器或从UI层实现逻辑。 (2认同)