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 NULL
Scheint 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 NULL
Werte bei der Verwendung zulassen UNIQUE
?" Oder "Wie kann man nur einen UNIQUE
NULL
Wert zulassen ?"
Die Frage wurde bereits beantwortet. Ja, Sie können doppelte NULL
Werte verwenden, während Sie den UNIQUE
Index verwenden.
Da bin ich auf diese Antwort gestoßen, als ich nach "wie man einen UNIQUE
NULL
Wert 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
NULL
Wert haben, Sie können jedoch einen UNIQUE
leeren 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.
UNIQUE
Einschränkungen fehlschlägt , sondern aufgrund von NOT NULL
Einschränkungen. Ich denke, diese Antwort ist für die Frage irrelevant, da es sich bei der Frage speziell um das Verhalten von UNIQUE
Zwä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.