I erstellt einzigartige Verbindung Index:Erstellen eindeutiger Compound Index, wo ein Feld in Mysql null sein
Alter Table TableX Add Unique Index `UniqueRecord` (A,B,C,D)
Das Problem ist, dass manchmal C
NULL sein kann.
Ich bemerkte, dass
`Insert IGNORE`
noch doppelte Datensätze in einigen Fällen war das Hinzufügen und das stellte sich heraus zu sein, wenn diese eingehenden Datensätze C
als NULL hatte.
testete ich die Hypothese, dass dies ein Problem war, indem Sie:
Select concat(A,B,C,D) as Index from TableA where C is NULL
Und Index
in jedem dieser Fälle tatsächlich NULL war. Sobald ich das Null-Feld aus der Auswahl entfernen:
Ich bekomme die erwarteten String-Werte vs NULL.
Also die Frage ist, anders als ein Update wie set C='' where C is NULL
gibt es eine Möglichkeit, den Index einzurichten, so dass es funktioniert? Ich verabscheue es, den Index A,B,D
einfach so zu machen, dass das unerwünschte Duplikate einführt, wenn C
tatsächlich nicht NULL ist.
Update: Ich habe versucht IfNull
in der Indexerstellung verwenden, aber Mysql tat es nicht so:
Alter Table TableA Add Unique Index UniqueLocator (A,B,IfNull(C,''),D
Mysql sagte:
[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 ist eine ziemlich einfache Lösung, danke. Ich denke immer noch darüber nach, ob das zu unerwarteten Problemen mit bestehenden Codes/Abfragen führen kann. – user3649739