我试图将一个检查约束SQLite中,其中要求如下:检查约束指定的值可能为空或约束
- 的值可以是空
- 如果值不为空,那么它应该是大于3
所以,在我创建的表我写
create table T(A real check(A = null or A>3));
为此,它看起来像创建表,但它不强制执行大于条件。
而且我也试过
create table T(A real check(A is null or A>3));
这还不首先创建表。
有人请帮助如何执行这两个约束?
谢谢
我试图将一个检查约束SQLite中,其中要求如下:检查约束指定的值可能为空或约束
所以,在我创建的表我写
create table T(A real check(A = null or A>3));
为此,它看起来像创建表,但它不强制执行大于条件。
而且我也试过
create table T(A real check(A is null or A>3));
这还不首先创建表。
有人请帮助如何执行这两个约束?
谢谢
为什么你需要两个?只要允许该字段为NULL,并使条件A> 3。本场要么是NULL,或NOT NULL,大于3 ...
CREATE TABLE (A real NULL check(A>3))
如果我有 “create table T(A real check(A> 3));”,它会照顾两种情况吗? 不会限制空值,因为那么当A为null时,null不能大于3,因此检查将失败。 –
@VinayakAgarwal:用5分钟写出一些'INSERT'语句真的很难吗?只要有可能,我们也很重视个人的努力。 – mellamokb
从SQL-92标准:
表检查约束是满意的,当且仅当指定 搜索条件对于表中的任何行都不是错误的。
如果A
为空,那么由于SQL的三值逻辑,A > 3
将评估为UNKNOWN。由于UNKNOWN不是FALSE,约束条件将得到满足。
想一想,如果标准没有以这种方式编写,那么每个约束都必须明确地测试null,这对编码人员来说更加“噪音”和痛苦。
工作对我来说很好:http://www.ideone.com/ERbhM – mellamokb
我会的。但我想我有一个后续。为了在这里询问,我已经简化了这个问题。问题仍然存在,因为我正在做类似“create table T(真正的检查(A为空或A> B),B为真)”,也可能是因为我在声明它之前访问B,它给了我约束错误。对此有任何破解? –
解决了它。谢谢你的帮助。 –