Ich habe eine E-Mail-Spalte, die eindeutig sein soll. Aber ich möchte auch, dass sie Nullwerte akzeptiert. Kann meine Datenbank auf diese Weise 2 Null-E-Mails haben?
Antworten
Zu viele Anzeigen?Ja, MySQL erlaubt mehrere NULLs 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. SQL Server 2005 und ältere Versionen erlauben beispielsweise nur einen einzigen NULL-Wert in einer Spalte, die eine eindeutige Einschränkung hat.
Von die Dokumente :
"Ein UNIQUE-Index erlaubt mehrere NULL-Werte Werte für Spalten, die NULL enthalten können NULL"
Dies gilt für alle Motoren, aber BDB .
Ich bin mir nicht sicher, ob der Autor ursprünglich nur gefragt hat, ob dies doppelte Werte erlaubt oder nicht, oder ob es hier eine implizite Frage gab: "Wie kann man doppelte Werte erlauben? NULL
Werte bei der Verwendung von UNIQUE
?" Oder "Wie kann man nur einen UNIQUE
NULL
Wert?"
Die Frage wurde bereits beantwortet: Ja, Sie können Duplikate haben. NULL
Werte bei Verwendung der UNIQUE
Index.
Da ich auf diese Antwort gestoßen bin, als ich nach "Wie kann man eine UNIQUE
NULL
Wert". Für alle anderen, die über diese Frage stolpern, während sie das Gleiche tun, ist der Rest meiner Antwort für Sie...
In MySQL können Sie nicht eine UNIQUE
NULL
Wert, Sie können jedoch einen UNIQUE
leeren Wert durch Einfügen mit dem Wert einer leeren Zeichenfolge.
Warnung: Numerisch und andere Typen als String können auf 0 oder einen anderen Standardwert gesetzt werden.
Vermeiden Sie nullbare eindeutige Beschränkungen. Sie können die Spalte immer in eine neue Tabelle einfügen, sie als nicht-null und eindeutig kennzeichnen und diese Tabelle nur auffüllen, wenn Sie einen Wert für sie haben. Auf diese Weise wird sichergestellt, dass jede Schlüsselabhängigkeit der Spalte korrekt durchgesetzt werden kann, und Probleme, die durch Nullen verursacht werden könnten, werden vermieden.
Eine einfache Antwort wäre: No, it doesn't
Erläuterung: Gemäß der Definition von Unique Constraints (SQL-92)
Eine eindeutige Einschränkung ist dann und nur dann erfüllt, wenn keine zwei Zeilen in einer Tabelle dieselben Nicht-Null-Werte in den eindeutigen Spalten haben
Diese Aussage kann in zweierlei Hinsicht interpretiert werden:
- Keine zwei Zeilen können die gleichen Werte haben, d.h.
NULL
yNULL
ist nicht erlaubt - Keine zwei Nicht-Null-Zeilen können Werte haben, d.h.
NULL
yNULL
ist in Ordnung, aberStackOverflow
yStackOverflow
ist nicht erlaubt
Da MySQL der zweiten Interpretation folgt, können mehrere NULL
Werte sind erlaubt in UNIQUE
Einschränkungsspalte. Zweitens, wenn Sie versuchen würden, das Konzept der NULL
in SQL, werden Sie feststellen, dass zwei NULL
Werte können überhaupt nicht verglichen werden, da NULL
in SQL bezieht sich auf nicht verfügbare oder nicht zugewiesene Werte (man kann nicht nichts mit nichts vergleichen). Wenn Sie nun nicht zulassen, dass mehrere NULL
Werte in UNIQUE
Einschränkungsspalte, schränken Sie die Bedeutung von NULL
in SQL. Ich würde meine Antwort wie folgt zusammenfassen:
MySQL unterstützt die UNIQUE-Beschränkung, aber nicht um den Preis, dass NULL ignoriert wird. Werte