Ich habe eine E-Mail-Spalte, die ich eindeutig sein möchte. Ich möchte aber auch, dass es Nullwerte akzeptiert. Kann meine Datenbank auf diese Weise 2 Null-E-Mails enthalten?
Ich habe eine E-Mail-Spalte, die ich eindeutig sein möchte. Ich möchte aber auch, dass es Nullwerte akzeptiert. Kann meine Datenbank auf diese Weise 2 Null-E-Mails enthalten?
Antworten:
Ja, MySQL erlaubt mehrere NULL-Werte in einer Spalte mit einer eindeutigen Einschränkung.
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
Ergebnis:
x
NULL
NULL
1
Dies gilt nicht für alle Datenbanken. Beispielsweise erlaubt SQL Server 2005 und älter nur einen einzelnen NULL-Wert in einer Spalte mit einer eindeutigen Einschränkung.
WHERE column IS NOT NULLScheint mir nicht einmal zu scheitern, da es in meiner Version von MySQL nicht unterstützt wird. Weiß jemand wo ich suchen könnte?
Aus den Dokumenten :
"Ein UNIQUE-Index erlaubt mehrere NULL-Werte für Spalten, die NULL enthalten können."
Dies gilt für alle Motoren außer BDB .
Ich bin mir nicht sicher, ob der Autor ursprünglich nur gefragt hat, ob dies doppelte Werte zulässt oder ob hier eine implizite Frage gestellt wurde: "Wie kann man doppelte NULLWerte bei der Verwendung zulassen UNIQUE?" Oder "Wie kann man nur einen UNIQUE NULLWert zulassen ?"
Die Frage wurde bereits beantwortet. Ja, Sie können doppelte NULLWerte verwenden, während Sie den UNIQUEIndex verwenden.
Da bin ich auf diese Antwort gestoßen, als ich nach "wie man einen UNIQUE NULLWert zulässt" gesucht habe . Für alle anderen, die auf diese Frage stoßen, während sie dasselbe tun, ist der Rest meiner Antwort für Sie ...
In MySQL können Sie keinen UNIQUE NULLWert haben, Sie können jedoch einen UNIQUEleeren Wert haben, indem Sie den Wert einer leeren Zeichenfolge einfügen.
Warnung: Numerisch und andere Typen als Zeichenfolgen können standardmäßig 0 oder einen anderen Standardwert sein.
UNIQUEEinschränkungen fehlschlägt , sondern aufgrund von NOT NULLEinschränkungen. Ich denke, diese Antwort ist für die Frage irrelevant, da es sich bei der Frage speziell um das Verhalten von UNIQUEZwängen handelt.
Vermeiden Sie nullbare eindeutige Einschränkungen. Sie können die Spalte jederzeit in eine neue Tabelle einfügen, sie ungleich Null und eindeutig machen und diese Tabelle dann nur dann füllen, wenn Sie einen Wert dafür haben. Dies stellt sicher, dass jede Schlüsselabhängigkeit von der Spalte korrekt erzwungen werden kann, und vermeidet Probleme, die durch Nullen verursacht werden könnten.