postgresql数据库唯一性约束没起作用

    今天碰见一个问题,数据库存入了两条一模一样的数据。

    因为两条数据插入间隔极小,所以开始以为是并发的问题,在排除了这个问题后,检查了数据库中该表是否设置了唯一性约束,确认有唯一性约束,理论上不应该存两条一样的数据,手动插入了一条一样的数据,还是可以插入,网上搜索了一下,果然有唯一性约束不起作用的情况,是因为Postgresql 认为null都是不相等的,多栏键值的唯一性只有全部是非NULL的情况下才可进行比较。而重复的数据正好有一个键值为NULL,解决的方式就是使用表达式索引。

    举个例子说明存在表table,其中该表的唯一键为B,C,D,当成为NULL时,插入了两条一模一样的数据如下:

table1
ABCDE
13999111111NULL1112018/08/03
23999111111NULL1112018/08/03

    该表中只有C可能为null,如果想让唯一性约束起作用需要这样,C字段默认空的时候存空字符串,这样就可以解决问题了。

ALTER TABLE table1

ALTER COLUMN C SET DEFAULT '';

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值