2010-06-21 32 views
9

Ich habe festgestellt, dass, wenn ich eine eindeutige zusammengesetzte Schlüssel für zwei Spalten, Spalte_a und Spalte_b, dann meine SQL ignoriert diese Einschränkung, wenn eine Spalte null ist.MySql Compound Keys und Nullwerte

z.

wenn column_a = 1 und column_b = null kann ich einfügen column_a = 1 und column_b = null, so viel wie Ich mag

wenn column_a = 1 und column_b = 2 I nur einmal diesen Wert einfügen.

Gibt es eine Möglichkeit, diese Einschränkung anzuwenden, abgesehen davon, dass Sie die Spalten möglicherweise in Not Null ändern und Standardwerte festlegen?

Antwort

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

„Ein eindeutiger Index erzeugt eine Einschränkung, so dass alle Werte im Index eindeutig sein muss. Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile mit einem Schlüsselwert zu schaffen, die eine vorhandene Zeile übereinstimmt. Diese Einschränkung gilt nicht für NULL-Werte außer der BDB-Speicher-Engine. Bei anderen Engines ermöglicht ein UNIQUE-Index mehrere NULL-Werte für Spalten, die NULL enthalten können. "

Also, nein, Sie können MySQL nicht dazu bringen, NULL als einen eindeutigen Wert zu behandeln. Ich denke, Sie haben ein paar Möglichkeiten: Sie könnten tun, was Sie in Ihrer Frage vorgeschlagen haben und einen "speziellen Wert" anstelle von null speichern, oder Sie könnten die BDB-Engine für die Tabelle verwenden. Ich denke nicht, dass dieser kleine Unterschied im Verhalten eine ungewöhnliche Wahl der Speicher-Engine zulässt.

+0

Danke Hammer! Ja, das Speichern eines speziellen Wertes wird nicht zu sehr weh tun und ist definitiv eine bessere Option für mich, als den Speichermechanismus zu ändern. – stevebot