postgresql數據庫唯一性約束沒起作用

    今天碰見一個問題,數據庫存入了兩條一模一樣的數據。

    因爲兩條數據插入間隔極小,所以開始以爲是併發的問題,在排除了這個問題後,檢查了數據庫中該表是否設置了唯一性約束,確認有唯一性約束,理論上不應該存兩條一樣的數據,手動插入了一條一樣的數據,還是可以插入,網上搜索了一下,果然有唯一性約束不起作用的情況,是因爲Postgresql 認爲null都是不相等的,多欄鍵值的唯一性只有全部是非NULL的情況下才可進行比較。而重複的數據正好有一個鍵值爲NULL,解決的方式就是使用表達式索引。

    舉個例子說明存在表table,其中該表的唯一鍵爲B,C,D,當成爲NULL時,插入了兩條一模一樣的數據如下:

table1
A B C D E
1 3999111111 NULL 111 2018/08/03
2 3999111111 NULL 111 2018/08/03

    該表中只有C可能爲null,如果想讓唯一性約束起作用需要這樣,C字段默認空的時候存空字符串,這樣就可以解決問題了。

ALTER TABLE table1

ALTER COLUMN C SET DEFAULT '';

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章