Wie Verwenden von eindeutigen Indizes in MySQL und anderen Datenbanken - Sitepoint
Wir können fast 17 Millionen Datensätze hinzufügen, bevor die ID außerhalb des Bereichs liegt.
Groß - außer, dass Aufzeichnungen 1 und 4 sind identisch. Was ist, wenn wir alle Telefonnummern sind einzigartig sicherstellen wollen?
einzigartige Indizes
In unserem Beispiel wollen wir keine zwei Datensätze haben die gleiche Land, Fläche, Anzahl und Ausdehnung gewährleisten. Wir können dies tun, indem sie unseren Tisch zu verändern:
Beachten Sie, dass die ‚ix_phone‘ Indexname ist optional. Alternativ könnten wir unsere Tabelle neu erstellen:
Lassen Sie uns versuchen, einen doppelten Datensatz einfügen, obwohl wir nicht eine ID festgelegt wird:
Der folgende Fehler wird generiert, wenn Sie MySQL verwenden:
Wenn Sie fast jede Datenbank verwenden, können Sie Ihre Telefonaufzeichnungen garantieren einzigartig sind unabhängig davon, wie die Daten eingefügt wird.
MySQL NULLs
Ich sage fast jede Datenbank, weil MySQL eine ungerade Marotte hat. NULL wird als eindeutiger Wert behandelt - weshalb man keine Vergleiche wie Wert = NULL verwenden können und müssen Wert NULL verwenden ist. Leider ist dies wirkt sich auch auf eindeutige Indizes und keine Logik implementiert wurde, es zu beheben.
Wir können unsere ursprüngliche INSERT mehrmals ausführen und ein neuer Datensatz wird jedes Mal erstellt werden, da das Erweiterungsfeld standardmäßig auf NULL und gilt als einzigartig sein:
Ja, es ist verrückt. Ich bin mir nicht bewusst, das Problem in anderen Datenbanken und sogar MySQL funktioniert wie erwartet, wenn Sie die BDB-Speicher-Engine verwenden. Es wurde als MySQL Bug gemeldet, aber es gibt keine bekannten Pläne, es zu beheben.
Die Lösung: sicherzustellen, dass alle Felder in einem eindeutigen Index definiert ist, können nicht auf NULL gesetzt werden. In diesem Beispiel könnten wir zeigen, dass es keine Nebenstellennummer durch einen Wert wie 0 oder 99999 Einstellung Oder vielleicht könnten wir das Feld eine Zahl mit Vorzeichen und stellen Sie machen -1. Es ist schrecklich, aber es wird funktionieren.
Trotz dieser Ausgabe sind eindeutige Indizes in vielen Situationen nützlich und helfen Ihnen, die Datenintegrität zu bewahren, wenn andere Programmierer und Anwender sind nicht so gewissenhaft!