Schwachstellen bei der Entwicklung Während des Entwicklungsprozesses sind die Datenbanktabellen in den RD- und QA-Umgebungen aufgrund häufiger Änderungen an Datenbankfeldern oft inkonsistent. Da diese Datenbankänderungsvorgänge jedoch von mehreren RDs durchgeführt werden können, ist es schwierig, sie alle auf einmal zu erfassen. Das manuelle Überprüfen der Felder in der QA-Umgebung ist sehr mühsam und kann leicht übersehen werden. LösungAlso habe ich ein Programm geschrieben, das automatisch die Tabellenstrukturen zweier Datenbanken vergleichen und ALTER-Anweisungen generieren kann. Es kann auch so konfiguriert werden, dass diese ALTER-Anweisungen automatisch ausgeführt werden. Weitere Einzelheiten finden Sie auf GitHub. PrinzipSynchronisieren Sie die neu hinzugefügte Tabelle Wenn in der RD-Umgebung eine neue Tabelle hinzugefügt wird, aber nicht in der QA-Umgebung, kann dieses Programm die Anweisung „Tabelle erstellen“ direkt ausgeben. Und so funktioniert es: Die hauptsächlich verwendeten SQL sind: Tabelle von rd_db anzeigen; Tabelle anzeigen, erstellen, hinzugefügter_Tabellenname; Struktur der Synchronisationstabelle Wenn die Struktur der rd-Tabelle geändert wurde, die qa-Umgebung jedoch nicht, kann dieses Programm die alter-Anweisung direkt ausgeben. Das Prinzip ist wie folgt: Die verwendeten SQL-Typen sind: wählen SPALTENNAME, SPALTENTYP, IS_NULLABLE, SPALTENSTANDARD, SPALTENKOMMENTAR, EXTRA aus information_schema.columns Wo TABLE_SCHEMA='rd_db' und TABLE_NAME = 'rd_table'; Code zum Vergleichen von Tabellenstrukturen: für (Spalte Spalte: sourceTable.getColumns().values()) { wenn (targetTable.getColumns().get(column.getName()) == null) { // Wenn das entsprechende Ziel dieses Feld nicht hat, ändern Sie es direkt String sql = "Tabelle ändern " + target.getSchema() + "." + targetTable.getTableName() + " hinzufügen " + Spalte .getName() + " "; sql += Spalte.getType() + " "; wenn (Spalte.getIsNull().equals("NEIN")) { sql += "NICHT NULL "; } anders { sql += "NULL"; } wenn (Spalte.getDefaultValue() != null) { sql += "DEFAULT " + SqlUtil.getDbString(column.getDefaultValue()) + " "; } if (column.getComment() != null) { sql += "KOMMENTAR " + SqlUtil.getDbString(column.getComment()) + " "; } wenn (nach != null) { sql += "nach " + nach; } ändereSql.add(sql+";"); } anders { //Überprüfen Sie die entsprechenden Quell- und Zielattribute String sql = "Tabelle ändern " + target.getSchema() + "." + targetTable.getTableName() + " ändern " + Spalte .getName() + " "; Spalte Quellspalte = Spalte; Spalte Zielspalte = Zieltabelle.getColumns().get(Quellspalte.getName()); // Vergleichen Sie die beiden Felder. Wenn null zurückgegeben wird, weist dies auf Konsistenz hin. String sqlExtend = compareSingleColumn(sourceColumn, targetColumn); if (sqlExtend != null) { changeSql.add(sql + sqlExtend+";"); } } nach = Spalte.getName(); } Indexstruktur synchronisierenWenn sich der Index der rd-Tabelle geändert hat, die QA-Umgebung jedoch nicht, kann dieses Programm die Anweisung zur Indexänderung direkt ausgeben. Das Prinzip ist dem oben genannten ähnlich und wird hier nicht wiederholt. Konfiguration sourceHost=127.0.0.1:3306 Quellbenutzer=root Quellpasswort = 123123123 Quellschema = mystique_db Quellzeichensatz = utf8 Zielhost = 127.0.0.1:3306 Zielbenutzer=root ZielPass=123123123 Zielschema = Mystique_Test ZielZeichensatz=utf8 autoExecute=YES //Dies zeigt die automatische Synchronisierung an laufen Konfigurieren Sie gemäß der obigen Vorlage und öffnen Sie sie mit IDE. Finden Sie alchemystar.runner.ShellRunner Führen Sie einfach die Hauptmethode aus Generierte Effektanzeige alter table mystique_test.t_test_3 change id id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '' Tabelle mystique_test.t_test_3 ändern, Index hinzufügen (Name) alter table mystique_test.t_test_3 drop index name_id alter table mystique_test.t_test_3 add id_2 varchar(50) NULL DEFAULT '' COMMENT '' nach Name Wenn die automatische Ausführung eingeschaltet ist, werden diese Anweisungen automatisch ausgeführt GitHub-Link https://github.com/alchemystar/Lancer Code Cloud-Link https://git.oschina.net/alchemystar/Lancer ZusammenfassenDies ist das Ende dieses Artikels über MySql-Entwicklung und automatische Synchronisierung der Tabellenstruktur. Weitere relevante Inhalte zur automatischen Synchronisierung der Tabellenstruktur von MySql finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Ein Artikel, der Ihnen HTML beibringt
Systemumgebung: centos7.4 1. Prüfen Sie, ob die D...
1. Konzept 1. Der Unterschied zwischen Hot Backup...
Vorwort: Im vorherigen Artikel haben wir hauptsäc...
Beschreibung Lösung Der Bridge-Modus der virtuell...
Problembeschreibung: Code kopieren Der Code laute...
Verwenden Sie Metadaten, um eine zeitgesteuerte A...
Ich habe vor Kurzem die 34 goldenen Regeln von Yah...
So verwandeln Sie ein JAR-Paket in einen Docker-C...
Inhaltsverzeichnis 1. Problembeschreibung 2. Prob...
Absolute Länge px px ist der Pixelwert, also eine...
<br />Vorheriger Artikel: Sieben Prinzipien ...
Vorwort Wir wissen, dass die Indexauswahl Aufgabe...
Der Schlüssel zum Erreichen der Zuordnung des Rahm...
1. Funktion: xargs kann die durch Leerzeichen ode...
Inhaltsverzeichnis 1. querySelector fragt ein ein...