条件SQLite检查约束?

时间:2010-04-10 23:48:34

标签: 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"))
);

我想添加一个约束,要求enddate为非空,如果 status为“完成”。

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

3 个答案:

答案 0 :(得分:41)

怎么样:

CHECK (status = "Current" or (status = "Complete" and enddate is not null))

答案 1 :(得分:4)

CREATE TABLE test (
  id       integer PRIMARY KEY,
  status   text NOT NULL CHECK (status IN ('Current', 'Complete')),
  enddate  date NOT NULL
);

这将在SQLite中起作用,内联写入CHECK约束。我将双引号更改为撇号,因此可以在PHP中使用。

答案 2 :(得分:0)

没有什么可以阻止您在单个表上拥有多个CHECK约束。 IMO是最简单,最容易扩展的解决方案:

CHECK (status IN ("Current", "Complete"))
CHECK (status <> "Complete" OR enddate IS NOT NULL)

这使用如果A然后B 在逻辑上等同于不是A或B 的事实。