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
In diesem Artikelbeispiel wird der spezifische JS...
Inhaltsverzeichnis 1. Die Stapelstruktur verstehe...
Überblick Dieser Artikel ist ein Skript zum autom...
Herunterladen: http://dev.mysql.com/downloads/mys...
Ende letzten Jahres habe ich im Dualsystem meines...
Vorstellung des Vorgesetzten Supervisor ist ein i...
Methode 1: Ändern Sie die Datei .bashrc oder .bas...
1. Wenn die Breite der angrenzenden schwebenden Eb...
1. Abfragegeschwindigkeit von zwei Abfrage-Engine...
1. Einleitung In diesem Artikel wird hauptsächlic...
Laden Sie zuerst die komprimierte Version von MyS...
Erster Blick auf die Wirkung: Vorwort: Auf diese ...
In diesem Artikelbeispiel wird der spezifische Co...
Wenn Browser-Anbieter die Standards umgehen und ei...
Vorwort Das Konzept des Dunkelmodus stammt ursprü...