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
1. Was ist Positionierung? Das Positionsattribut ...
Siehe: https://www.jb51.net/article/112612.htm Üb...
Bei Verwendung von setinterval wird festgestellt,...
Einführung in Git Git ist eine Open-Source-Versio...
1. Erster Download von der offiziellen Website vo...
1. Einleitung Wenn wir uns bei MySQL anmelden, wi...
Heute werde ich diese Anfängerfragen beantworten: ...
Inhaltsverzeichnis Datenverarbeitungslösung auf M...
Die Lösungen für die Probleme, die bei der Erstell...
Wirkung: Ideen: Verwenden Sie das Eingabetypattri...
Aber vor kurzem habe ich festgestellt, dass die Ve...
Installations- und Konfigurationsmethode für MySQ...
Heutzutage beginnen immer mehr Front-End-Entwickle...
Vorwort Als wir das Pferd geschrieben haben, wuss...
Kerncode -- Im Folgenden werde ich die Implementi...