Einige Studenten sagten, dass sie auf das Problem der Inkonsistenz zwischen Master und Slave gestoßen seien. Die allgemeine Situation ist, dass die Slave-Datenbank durch Exportieren und Importieren von Daten mithilfe von mysqldump erstellt wird. Nachdem die Erstellung erfolgreich war, wird bei der Verwendung von mysqldump zur Überprüfung, ob die Tabellenstruktur von Master und Slave konsistent ist, festgestellt, dass einige Tabellendefinitionen inkonsistent sind: Aus den Vergleichsergebnissen können wir erkennen, dass auf der Slave-Seite den Definitionen von drei Spalten „default null“ hinzugefügt wird. Ich vermutete, dass die Umgebung von jemandem verändert worden war, konnte jedoch schließlich bestätigen, dass die Umgebung nicht manipuliert worden war. Dann habe ich einen weiteren Test durchgeführt, bei dem ich mysqldump zum Exportieren der Daten und source zum Importieren der Daten in die Slave-Datenbank verwendet habe. Ich habe festgestellt, dass dieses Phänomen immer noch auftrat, und gefragt, ob der Befehl source einen Fehler enthielt! Tatsächlich hängt dies damit zusammen, wie MySQL intern implizite Standardwerte verarbeitet. Wenn ein Datentyp keinen expliziten Standardwert enthält, bestimmt MySQL den Standardwert gemäß den folgenden Regeln: Wenn Daten in eine NOT NULL -Spalte ohne explizite DEFAULT-Klausel eingegeben werden und eine INSERT - oder REPLACE-Anweisung keinen Wert für die Spalte enthält oder eine UPDATE-Anweisung die Spalte auf NULL setzt, behandelt MySQL die Spalte entsprechend dem geltenden SQL-Modus: Nehmen wir an, dass Tabelle t wie folgt definiert ist: mysql> Tabelle erstellen t(i int ungleich null); Hier hat i keinen expliziten Standardwert. mysql> Variablen wie „%sql_mode%“ anzeigen; +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Variablenname | Wert | +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | SQL-Modus | NUR_VOLLSTÄNDIGE_GROUP_BY, STRENGE_TRANS_TABLES, KEINE_NULL_IM_DATUM, KEIN_NULL_DATUM, FEHLER_FÜR_DIVISION_DURCH_NULL, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION | +-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ 1 Zeile im Satz (0,01 Sek.) mysql> INSERT INTO t VALUES(); FEHLER 1364 (HY000): Feld „i“ hat keinen Standardwert mysql> IN t-WERTE EINFÜGEN (STANDARD); FEHLER 1364 (HY000): Feld „i“ hat keinen Standardwert mysql> IN t-WERTE EINFÜGEN (DEFAULT(i)); FEHLER 1364 (HY000): Feld „i“ hat keinen Standardwert MySQL> Im nicht strikten SQL-Modus: mysql> SETZEN @@sql_mode=''; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.) mysql> Variablen wie „%sql_mode%“ anzeigen; +---------------+-------+ | Variablenname | Wert | +---------------+-------+ | SQL-Modus | | +---------------+-------+ 1 Zeile im Satz (0,00 Sek.) mysql> INSERT INTO t VALUES(); Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,00 Sek.) mysql> IN t-WERTE EINFÜGEN (STANDARD); Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,01 Sek.) mysql> IN t-WERTE EINFÜGEN (DEFAULT(i)); FEHLER 1364 (HY000): Feld „i“ hat keinen Standardwert mysql> wähle * aus t; +---+ | ich | +---+ | 0 | | 0 | +---+ 2 Zeilen im Satz (0,01 Sek.) MySQL> Für eine bestimmte Tabelle zeigt die Anweisung SHOW CREATE TABLE an, welche Spalten eine explizite DEFAULT-Klausel haben. Die impliziten Standardwerte sind wie folgt definiert: mysql> Tabelle erstellen t1(id int,name varchar(20)); Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) mysql> anzeigen, Tabelle erstellen t1\G *************************** 1. Reihe *************************** Tabelle: t1 Tabelle erstellen: CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `name` varchar(20) STANDARD NULL ) ENGINE=InnoDB STANDARD-CHARSET=utf8mb4 1 Zeile im Satz (0,00 Sek.) MySQL> Oben finden Sie Einzelheiten dazu, wie MySQL implizite Standardwerte behandelt. Weitere Informationen zu impliziten MySQL-Standardwerten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Analyse des Consul-Konfigurationsprozesses für die Docker-Bereitstellung
Zwei Methoden zur Implementierung der Mysql-Remot...
Sie wissen, dass der Browser ohne diese Option bei...
Ich habe gestern gerade etwas HTML gelernt und kon...
Der Ursprung des Problems Das erste Mal, dass ich...
Beinhaltet den Prozess der Initialisierung des Ro...
1. Flex-Richtung: (Richtung der Elementanordnung)...
Eine ausführliche Dokumentation zur Installation ...
In diesem Artikel wird die MySQL-Vorkompilierungs...
In diesem Artikelbeispiel wird der spezifische Co...
React ist eine Open-Source-JavaScript-Bibliothek,...
Vorwort Wenn Sie MySQL installieren, erstellen Si...
1. Funktion : Ermöglicht der übergeordneten Kompo...
Inhaltsverzeichnis 1. Erstellen Sie eine Tabelle ...
Code kopieren Der Code lautet wie folgt: jQuery.c...
Als ich kürzlich an CSS-Schnittstellen arbeitete,...