Vorwort Eine Anforderung, die ich zuvor zur Vereinfachung der Beschreibung gestellt hatte, besteht darin, MQ-Nachrichten von anderen Gruppen zu empfangen und dann einen Datensatz in die Datenbank einzufügen. Um das wiederholte Senden von Nachrichten und das Einfügen mehrerer doppelter Datensätze zu verhindern, wird mehreren Spalten in der Tabelle ein eindeutiger Index hinzugefügt. ERSTELLEN SIE EINEN EINZIGARTIGEN INDEX IDX_UN_LOAN_PLAN_APP FÜR testTable (A, B, C); Derzeit erlauben die Spalten A, B und C keine NULL-Werte und die Eindeutigkeitsbeschränkung funktioniert auch. Später wurde aufgrund geänderter Anforderungen die vorherige Eindeutigkeitsbeschränkung geändert und eine weitere Spalte hinzugefügt. (Ich werde nicht näher darauf eingehen, warum es hinzugefügt wurde). ALTER TABLE testTable DROP INDEX IDX_UN_LOAN_PLAN_APP, EINDEUTIGEN SCHLÜSSEL `IDX_UN_LOAN_PLAN_APP` HINZUFÜGEN (A, B, C, D); Das neu hinzugefügte D ist vom Typ datetime, lässt NULL zu und hat einen Standardwert von NULL. Der Grund, warum der Standardwert NULL ist, besteht darin, dass nicht alle Datensätze diese Zeit haben. Wenn ein magischer Wert (wie „1970-01-01 08:00:00“) zwangsweise als Standardwert festgelegt wird, sieht das seltsam aus. Blaue Königin. . . Dann geht etwas schief. Nach dem Hinzufügen von D ist die Eindeutigkeitsbeschränkung grundsätzlich ungültig. In Testtabelle einfügen (A,B,C,D) VALUES (1,2,3,NULL); --- OK In Testtabelle einfügen (A,B,C,D) VALUES (1,2,3,NULL); --- OK In Testtabelle einfügen (A,B,C,D) VALUES (1,2,3,NULL); --- OK Die obigen drei SQL-Anweisungen können alle erfolgreich ausgeführt werden und es entstehen mehrere identische Datensätze in der Datenbank. Gemäß unserer bisherigen Idee sollte bei der Ausführung der letzten beiden SQL-Anweisungen eine Ausnahme vom Typ „Doppelter Schlüssel“ ausgelöst werden. Später habe ich nachgesehen und festgestellt, dass dieser Punkt in der offiziellen MySQL-Dokumentation bereits klar dargelegt wurde. Eindeutige Indizes erlauben die Existenz mehrerer NULL-Werte: 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 mit einer vorhandenen Zeile übereinstimmt. Für alle Engines erlaubt ein UNIQUE-Index mehrere NULL-Werte für Spalten, die NULL enthalten können. Aus der folgenden Tabelle ist außerdem ersichtlich, dass beim Erstellen eines eindeutigen Schlüssels mehrere NULL-Werte zulässig sind, unabhängig davon, welche Art von Speicher-Engine verwendet wird. . . . Wenn man darüber nachdenkt, ist das eigentlich ganz vernünftig. Schließlich steht NULL in MySQL für "unbekannt". In SQL gibt jeder mit NULL verglichene Wert NULL statt TRUE zurück, sogar ein Vergleich von NULL und NULL gibt NULL zurück. Die einzige Lösung besteht also darin, das Problem zu beheben. . . Die Lösung ist ziemlich einfach und grob. Ich habe einfach die Online-Daten aktualisiert, „1970-01-01 08:00:00“ als Standardwert festgelegt und dann die Spalte so geändert, dass NULL nicht zulässig ist. Ähm. Viele Leute haben dieses Problem auf der offiziellen MySQL-Website diskutiert. Einige Leute denken, es sei ein MySQL-Fehler, während andere denken, es sei eine Funktion. Anbei der Link. MySQL-Fehler: #8173: Eindeutiger Index erlaubt Duplikate mit Nullwerten Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Kalendereffekt basierend auf jQuery
>>: So erstellen, speichern und laden Sie Docker-Images
In diesem Artikel wird der spezifische JS-Code zu...
1. Ich habe vorher die Version QT5.13 heruntergel...
Kapitel 1: Einführung in Keepalived Der Zweck des...
vuex-persistenter Zustand Kernprinzip: Alle Vuex-...
Grundlegende Analyse des IMG-Tags: In HTML5 beste...
Während des Entwicklungsprozesses verwenden wir h...
Umfassendes Verständnis des html.css-Überlaufs XM...
bei um + Zeit um 17:23 at> touch /mnt/file{1.....
Detaillierte Erklärung und Zusammenfassung der UR...
Inhaltsverzeichnis 1. Grundlegender Überblick übe...
Situationsbeschreibung: Die Datenbank wurde abnor...
MyISAM-Speicher-Engine MyISAM basiert auf der ISA...
Die Datenmigration muss von MySQL nach ClickHouse...
Wissenspunkte in der Vorschau anzeigen. Animation...
1. Übergeordnete Komponenten können Daten über Re...