3

我正在尝试在 SQLite 中合并一个检查约束,其中要求如下:

  1. 该值可能为空
  2. 如果该值不为空,那么它应该大于 3。

所以,在我的创建表中我写了

create table T(A real check(A = null or A>3)); 

为此,它看起来像是创建了表,但它不强制执行大于条件。

我也试过

create table T(A real check(A is null or A>3)); 

这甚至不会首先创建表。

有人可以帮助如何执行这两个约束吗?

谢谢

4

2 回答 2

4

从 SQL-92 标准:

当且仅当指定的搜索条件对于表的任何行都不为假时,才满足表检查约束。

如果A为空,则 A > 3由于 SQL 的三值逻辑,计算结果为 UNKNOWN。因为 UNKNOWN 不是 FALSE,所以将满足约束。

考虑一下,如果标准不是这样编写的,那么每个约束都必须明确地测试 null,这对编码人员来说将是更多的“噪音”和痛苦。

于 2011-11-16T09:07:49.110 回答
4

为什么两者都需要?只需允许该字段为 NULL 并使条件 A>3。该字段将是 NULL 或者如果不是 NULL,则大于 3...

CREATE TABLE (A real NULL check(A>3))
于 2011-11-16T04:51:33.910 回答