Einzigartige Einschränkung, die leere Werte in MySQL zulässt

125

Ich habe ein Feld, in dem Produktcodes gespeichert sind. Die Codes sind eindeutig, aber einige Produkte haben einfach keinen Code. Ich kann keine Codes erfinden, da dies Anbietercodes sind.

Ist diese Art von Einschränkung in MySQL möglich?

Ich bin ein Neuling mit gespeicherten Prozeduren und Triggern. Wenn die Lösung eine davon beinhaltet, haben Sie bitte etwas Geduld.

Update: Die Spalte ist NICHT Null. Deshalb konnte ich das nicht.

Der Desintegrator
quelle
Mögliches Duplikat von Ignoriert MySQL Nullwerte für eindeutige Einschränkungen?
Amir Ali Akbari
@AmirAliAkbari Es ist lustig, wie diese beiden als "mögliches Duplikat" miteinander verknüpft sind. Dieser ist allerdings älter. :)
Pijusn

Antworten:

182

Ja, das kannst du machen. Siehe die MySQL-Referenz (Version 5.5) .

Ein UNIQUE-Index erstellt eine Einschränkung, sodass alle Werte im Index unterschiedlich sein müssen. Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile mit einem Schlüsselwert hinzuzufügen, der einer vorhandenen Zeile entspricht. Für alle Engines erlaubt ein UNIQUE-Index mehrere NULL-Werte für Spalten, die NULL enthalten können.

EricC
quelle
8
Vielen Dank. Ich muss es nullbar machen
The Disintegrator
hatte dieses Problem im Django-Modell. Es funktioniert nullbar. Danke
Shrey
13

Ja, wenn Sie die Produktcode-Spalte nullwertfähig machen (nicht mit deklariert NOT NULL), ermöglicht der eindeutige Schlüssel mehrere Zeilen mit NULLProduktcodes.

Chaos
quelle
Vielen Dank. Ich muss es nullbar machen
The Disintegrator
8

In MySQL können weiterhin mehrere Zeilen den Wert NULLin einer eindeutigen Spalte haben.

cg.
quelle
Vielen Dank. Ich muss es nullbar machen
The Disintegrator
@MianAnjum fett gedruckt: CREATE TABLE table( keyint (11) NICHT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Paul Nowak