So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

Während des Entwicklungs- und Debugging-Prozesses ist es notwendig, die Unterschiede zwischen dem neuen und dem alten Code zu vergleichen. Zum Vergleich können wir Versionskontrolltools wie git/svn verwenden. Es gibt auch Unterschiede in den Datenbanktabellenstrukturen verschiedener Versionen. Wir müssen auch die Unterschiede vergleichen und die SQL-Anweisungen zum Aktualisieren der Struktur abrufen.

Beispielsweise funktioniert derselbe Codesatz in der Entwicklungsumgebung normal, weist jedoch in der Testumgebung Probleme auf. In diesem Fall müssen Sie neben der Überprüfung der Servereinstellungen auch vergleichen, ob es Unterschiede in den Datenbanktabellenstrukturen zwischen der Entwicklungsumgebung und der Testumgebung gibt. Nachdem Sie die Unterschiede gefunden haben, müssen Sie die Datenbanktabellenstruktur der Testumgebung aktualisieren, bis die Datenbanktabellenstrukturen der Entwicklungs- und Testumgebung konsistent sind.

Wir können das Tool mysqldiff verwenden, um die Datenbanktabellenstruktur zu vergleichen und die SQL-Anweisung zum Aktualisieren der Struktur zu erhalten.

1.mysqldiff-Installationsmethode

Das Tool mysqldiff befindet sich im Paket mysql-utilities. Für die Ausführung von mysql-utilities ist die Installation der Abhängigkeit mysql-connector-python erforderlich.

mysql-connector-python-installation

Download-Adresse: https://dev.mysql.com/downloads/connector/python/

MySQL-Dienstprogramme installieren

Download-Adresse: https://downloads.mysql.com/archives/utilities/

Da ich ein Mac-System verwende, kann ich es direkt mit Brew installieren.

brew installiere caskroom/cask/mysql-connector-python
brew install caskroom/cask/mysql-utilities

Führen Sie nach der Installation den Befehl aus, um die Version anzuzeigen. Wenn die Version angezeigt wird, bedeutet dies, dass die Installation erfolgreich war.

mysqldiff --version
MySQL-Dienstprogramme mysqldiff Version 1.6.5 
Lizenztyp: GPLv2

2. So verwenden Sie mysqldiff

Befehl:

mysqldiff --server1=root@host1 --server2=root@host2 --difftype=sql db1.table1:dbx.table3

Parameterbeschreibung:

--server1 gibt Datenbank 1 an
--server2 gibt Datenbank 2 an

Der Vergleich kann für eine einzelne Datenbank durchgeführt werden. Durch Angabe nur der Option „server1“ können verschiedene Tabellenstrukturen in derselben Datenbank verglichen werden.

--difftype zeigt Informationen zu Unterschieden an

vereinheitlicht (Standard)
Anzeige der Ausgabe im einheitlichen Format

Kontext
Ausgabe im Anzeigekontextformat

abweichen
Ausgabe in verschiedenen Formaten anzeigen

SQL-Befehle
Ausgabe der SQL-Konvertierungsanweisung anzeigen

Wenn Sie SQL-Konvertierungsanweisungen erhalten möchten, ist der SQL-Anzeigemodus am besten geeignet.

--character-set gibt den Zeichensatz an

--changes-for wird verwendet, um das zu konvertierende Objekt anzugeben, d. h. die Richtung, in der Unterschiede generiert werden. Der Standardwert ist server1

--changes-for=server1 bedeutet, dass Server1 in Server2 konvertiert wird, wobei Server2 der primäre Server ist.

--changes-for=server2 bedeutet, dass Server2 in die Struktur von Server1 konvertiert wird, wobei Server1 der primäre Server ist.

--skip-table-options Unterschiede in AUTO_INCREMENT, ENGINE, CHARSET ignorieren.

--version Version anzeigen

Weitere Informationen zur Verwendung von mysqldiff-Parametern finden Sie in der offiziellen Dokumentation:
https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqldiff.html

3. Beispiele

Erstellen von Testdatenbanktabellen und -daten

Datenbank Testa erstellen;
Datenbank testb erstellen;

Testa verwenden;

TABELLE ERSTELLEN `tba` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(25) NICHT NULL,
 `Alter` int(10) unsigned NOT NULL,
 `addtime` int(10) unsigned NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;

einfügen in `tba`(Name, Alter, Addtime) Werte('fdipzone', 18,1514089188);

verwende testb;

TABELLE ERSTELLEN `tbb` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NICHT NULL,
 `Alter` int(10) NICHT NULL,
 `addtime` int(10) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

einfügen in `tbb`(Name, Alter, Addtime) Werte('fdipzone', 19,1514089188);

Führen Sie einen Differenzvergleich durch, legen Sie Server1 als Hauptserver fest und Server2 sollte in die Datenbanktabellenstruktur von Server1 konvertiert werden

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [FEHLER]
# Transformation für --changes-for=server2:
#

ALTER TABLE `testb`.`tbb` 
 ÄNDERN SPALTE addtime addtime int(10) unsigned NOT NULL, 
 ÄNDERN SPALTE Alter Alter int(10) unsigned NOT NULL, 
 ÄNDERN SPALTE name name varchar(25) NICHT NULL, 
UMBENENNEN IN testa.tba 
, AUTO_INCREMENT=1002;

# Vergleich fehlgeschlagen. Ein oder mehrere Unterschiede gefunden.

Führen Sie die von mysqldiff zurückgegebene Update-SQL-Anweisung aus.

mysql> ALTER TABLE `testb`.`tbb` 
  -> ÄNDERN SPALTE addtime addtime int(10) unsigned NOT NULL, 
  -> ÄNDERN SPALTE Alter Alter int(10) unsigned NOT NULL, 
  -> SPALTE ÄNDERN Name Name varchar(25) NICHT NULL;
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

Führen Sie mysqldiff erneut aus, um zu vergleichen. Es gibt keinen Unterschied in der Struktur, nur AUTO_INCREMENT ist anders.

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [FEHLER]
# Transformation für --changes-for=server2:
#

ALTER TABLE `testb`.`tbb` 
UMBENENNEN IN testa.tba 
, AUTO_INCREMENT=1002;

# Vergleich fehlgeschlagen. Ein oder mehrere Unterschiede gefunden.

Stellen Sie AUTO_INCREMENT so ein, dass es ignoriert wird, und vergleichen Sie dann die Unterschiede. Der Vergleich ist erfolgreich.

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --skip-table-options --difftype=sql testa.tba:testb.tbb;
# Server1 auf lokalem Host: ... verbunden.
# Server2 auf lokalem Host: ... verbunden.
# Vergleiche testa.tba mit testb.tbb [PASS]
# Erfolg. Alle Objekte sind gleich.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispielcode für die SQL-Vergleichsmethode für mehrere Tabellen und Felder

<<:  JavaScript implementiert die Verarbeitung großer Datei-Uploads

>>:  Detailliertes Tutorial zur Nginx-Installation

Artikel empfehlen

vue2.x-Konfiguration von vue.config.js zur Projektoptimierung

Inhaltsverzeichnis Vorwort vue.config.js-Konfigur...

Eine kurze Einführung in JavaScript-Arrays

Inhaltsverzeichnis Einführung in Arrays Array-Lit...

So beheben Sie den Fehler beim MySQL-Transaktionsvorgang

So beheben Sie den Fehler beim MySQL-Transaktions...

So zeigen Sie Bildinformationen in Docker an

In diesem Artikel müssen wir lernen, wie man Bild...

Bei MySQL-Zeichentypen wird die Groß-/Kleinschreibung beachtet.

Standardmäßig sind MySQL-Zeichentypen nicht case-...

Hinweise zum Systemaufruf des Linux-Kernel-Gerätetreibers

/**************************** * Systemaufruf*****...

MySQL-Operator-Zusammenfassung

Inhaltsverzeichnis 1. Arithmetische Operatoren 2....

React realisiert den gesamten Prozess des Seitenwasserzeicheneffekts

Inhaltsverzeichnis Vorwort 1. Anwendungsbeispiele...

Zusammenfassung der grundlegenden Kenntnisse zur MySql-Datenbank

Inhaltsverzeichnis Grundlegende Datenbankvorgänge...

Docker-Speicherüberwachung und Stresstestmethoden

Der ausgeführte Docker-Container zeigt, dass der ...

So ändern Sie die Standardspeicher-Engine in MySQL

MySQL-Speicher-Engine: Der MySQL-Server verwendet...

Detaillierter Prozess der NTP-Serverkonfiguration unter Linux

Inhaltsverzeichnis 1. Umgebungskonfiguration 1.NT...

So verweisen Sie im WeChat-Applet wxss auf externe CSS-Dateien und Iconfonts

Ursache So importieren Sie externe Dateien in ein...