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
Vorwort Aus Sicherheitsgründen kann sich der Root...
Inhaltsverzeichnis Vorwort 1. Lazy Loading-Routin...
CSS realisiert den Prozessnavigationseffekt. Der ...
Was ist Schauen wir uns zunächst das Konzept von ...
Linux-Bibliothek generieren Die Linux-Version ver...
Wenn Server B (172.17.166.11) eingeschaltet oder ...
Für gleichmäßig verteilte Layouts verwenden wir i...
Vorwort JSON ist ein leichtes Datenaustauschforma...
Zen-Codierung Es ist ein Texteditor-Plugin. In ei...
1. MySQL-Archiv herunterladen (dekomprimierte Ver...
Docker erfreut sich immer größerer Beliebtheit. E...
Ich verwende Redis seit Kurzem und finde es recht...
<br />Semantisierung lässt sich nicht mit we...
Ich bin vor kurzem in ein neues Unternehmen einge...
Centos7-Startvorgang: 1.post (Selbsttest beim Ein...