gpt4 book ai didi

sql - 对一组列的 NOT NULL 约束

转载 作者:太空狗 更新时间:2023-10-30 01:50:09 25 4
gpt4 key购买 nike

我在 Postgres 中有一个表,它的 email 列目前有一个 NOT NULL 约束。该表还有一个可选的 phone 列。我希望系统接受一些没有 email 的记录,但前提是这些记录的 phoneNOT NULL。换句话说,我需要一个 NOT NULL 数据库约束,以便 CREATEUPDATE 查询成功而不会出现任何错误,如果 存在电子邮件电话 字段。

进一步扩展上述内容,在 Postgres 中是否可以指定一组列名,其中一个或多个列名应为 NOT NULL 才能成功更新或创建记录?

最佳答案

@Igor is quite right和几个 OR 'ed 表达式快速而简单。

对于一长列列(示例中的 abcdefg ),这是更短但同样快速的:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<> fiddle here
<子>旧sqlfiddle

它是如何工作的?

上面的更详细的形式是:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW这里是多余的语法。

测试 ROWIS NULL 表达报告TRUE如果每一列都是NULL - 这恰好是我们想要排除的。

(a,b,c,d,e,f,g) IS NOT NULL 简单地反转这个表达式是不可能的,因为那会测试每一列 IS NOT NULL .相反,用 NOT 否定整个表达式.瞧。

手册中有更多详细信息herehere .

形式的表达式:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

会达到同样的效果,但不太优雅,而且有一个主要限制:仅适用于匹配数据类型的列,而检查 ROW表达式适用于任何 列。

关于sql - 对一组列的 NOT NULL 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com