当前位置:   article > 正文

开发踩坑记录之三:PostgreSQL数据库表唯一性约束失效_pgsql 唯一键多列null 唯一失效

pgsql 唯一键多列null 唯一失效

引言

在设计数据库表过程中,我们通常会对数据库表进行唯一性约束,以防止事务不一致导致的相同数据的重复插入问题。但是在实际开发中发现,即使设置了数据库表的唯一性约束,仍然出现了相同数据重复插入的问题。


问题原因

例如如下的user数据库表:

idc_user_namei_user_agei_user_phone
1tom23
2alex32222222
3tom34

我们设置的唯一性约束如下所示:

CONSTRAINT "uc_userId" UNIQUE ("c_user_name",“i_user_phone”)
  • 1

但是当第一条以及第三条i_user_phone字段数据为空时,数据库认为这是两条不同的数据。原因是字段为null时,数据库认为是不一样的数据,从而导致重复数据的插入。只有当所有的字段都不为空时,才会进行数据唯一性校验。

解决办法

create unique index userIndex on user((coalesce(i_user_phone,-1)||c_user_name))

当对应字段为空时则返回-1,这样就会避免null引起的重复数据插入问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/606150
推荐阅读
相关标签
  

闽ICP备14008679号