433 Stimmen

Ignoriert MySQL Nullwerte bei eindeutigen Beschränkungen?

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?

634voto

Mark Byers Punkte 761508

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.

148voto

Matthew Flaschen Punkte 266507

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 .

20voto

bluegman991 Punkte 687

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.

10voto

nvogel Punkte 24074

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.

7voto

Akshay Katiha Punkte 370

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 y NULL ist nicht erlaubt
  • Keine zwei Nicht-Null-Zeilen können Werte haben, d.h. NULL y NULL ist in Ordnung, aber StackOverflow y StackOverflow 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X