爲null,我創建了獨特的複合指數:創造獨特的合成指數,其中一個字段可以在MySQL
Alter Table TableX Add Unique Index `UniqueRecord` (A,B,C,D)
的問題是,有時C
可以爲NULL。
我注意到,
`Insert IGNORE`
仍然在某些情況下增加重複的記錄,這竟然是當這些傳入記錄了C
爲NULL。
我測試的假設,這是一個問題,這樣做:
而且Index
在每個這種情況下,其實是NULL。一旦我從選擇刪除空字段:
Select concat(A,B,D) as Index from TableA where C is NULL
我得到預期的字符串值與空值。
所以問題是,除了像set C='' where C is NULL
這樣的更新之外,是否有一些方法可以設置索引以便它起作用?我不喜歡簡單地製作索引A,B,D
,因爲當C
實際上不是NULL時,可能會引入不需要的重複。
更新: 我曾嘗試在索引創建使用IfNull
但MySQL並沒有這樣的:
Alter Table TableA Add Unique Index UniqueLocator (A,B,IfNull(C,''),D
MySQL表示:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'C,''),D)' at line 1
Tha是一個非常簡單的解決方案謝謝。我仍在考慮如果這可能會導致現有的代碼/查詢意外的問題。 – user3649739