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

引言

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


问题原因

例如如下的user数据库表:

id c_user_name i_user_age i_user_phone
1 tom 23
2 alex 32 222222
3 tom 34

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

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

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

解决办法

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

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

猜你喜欢

转载自blog.csdn.net/Diamond_Tao/article/details/81540795