【问题标题】:SQL: NOT NULL constraint on a set of columns [duplicate]SQL:对一组列的 NOT NULL 约束[重复]
【发布时间】:2015-01-16 00:40:27
【问题描述】:

考虑下表:

CREATE TABLE user(
   first_name text,
   last_name text,
   ...
)

我希望能够添加具有名字、姓氏或两者的用户 - 但我不允许没有任何名字的用户。换句话说(感谢@wildplasser)- 至少一列不应该为 NULL。

 INSERT INTO user(first_name, last_name) VALUES ("foo", NULL);  # 1. OK
 INSERT INTO user(first_name, last_name) VALUES ("foo", "bar"); # 2. OK
 INSERT INTO user(first_name, last_name) VALUES (NULL, "bar");  # 3. OK
 INSERT INTO user(first_name, last_name) VALUES (NULL, NULL);   # 4. NOT OK

显然,每列上的 NOT NULL 约束将禁用示例 2 和 3。

如何在 SQL 中对一组列表示 NOT NULL 约束?

【问题讨论】:

  • 一种方法是创建一个检查两列的触发器,如果​​两列都为空,则引发异常。
  • 你的意思是:至少其中一列应该是 BOT NULL ?
  • this 帮忙吗?
  • [我的意思是:显然不是 NULL] 不能由列约束强加,因为它只能引用 one 列。所以:你需要一个触发器,恕我直言。
  • 我认为这里已经回答了这个问题:stackoverflow.com/questions/21021102/…

标签: sql postgresql constraints


【解决方案1】:
CREATE TABLE user(
   first_name text,
   last_name text,
   ...,
   CHECK (first_name IS NOT NULL OR last_name IS NOT NULL)
)

【讨论】:

【解决方案2】:

你可以使用查询

比如这样

INSERT INTO user(first_name) VALUES (NULL);

当数据库架构设置列lastname允许NULL时,lastname将为NULL

希望有所帮助 谢谢

【讨论】:

    猜你喜欢
    • 2014-01-28
    • 2023-02-03
    • 1970-01-01
    • 2010-12-27
    • 2015-09-25
    • 2010-12-20
    • 2015-04-22
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多