加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

只有在Postgresql中列不为null时,如何强制执行约束?

发布时间:2020-12-13 16:31:03 所属栏目:百科 来源:网络整理
导读:我想要一个解决方案,只有当列不为null时才强制执行约束.我似乎无法在文档中找到这样做的方法. create table mytable( table_identifier_a INTEGER,table_identifier_b INTEGER,table_value1,...) 根据数据的性质,我将在创建表时使用标识符b和值.在我们收到其
我想要一个解决方案,只有当列不为null时才强制执行约束.我似乎无法在文档中找到这样做的方法.
create table mytable(
  table_identifier_a INTEGER,table_identifier_b INTEGER,table_value1,...)

根据数据的性质,我将在创建表时使用标识符b和值.在我们收到其他数据后,我将能够填充标识符a.此时我想确保(identifier_a,value1)的唯一键,但仅限于identifier_a存在.

希望这是有道理的,任何人都有任何想法?

嗯.唯一约束不会阻止多个NULL值.
CREATE TABLE mytable (
    table_identifier_a   INTEGER    NULL,table_identifier_b   INTEGER    NOT NULL,table_value1         INTEGER    NOT NULL,UNIQUE(table_identifier_a,table_identifier_b)
);

请注意,即使在identifier_b时,我们也可以将多个NULL插入其中
火柴:

test=# INSERT INTO mytable values(NULL,1,2);
INSERT 0 1
test=# INSERT INTO mytable values(NULL,2);
INSERT 0 1
test=# select * from mytable;
 table_identifier_a | table_identifier_b | table_value1 
--------------------+--------------------+--------------
                    |                  1 |            2
                    |                  1 |            2
(2 rows)

但是我们不能创建重复的(a,b)对:

test=# update mytable set table_identifier_a = 3;
ERROR:  duplicate key value violates unique constraint "mytable_table_identifier_a_key"

当然,您确实遇到了问题:您的表没有主键.您可能有数据模型问题.但是你提供的不够细节来解决这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读