開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、RD 環境と QA 環境のデータベース テーブルに不整合が生じることがよくあります。 ただし、これらのデータベース変更操作は複数の RD によって実行される可能性があるため、すべてを一度に収集することは困難です。 QA 環境でフィールドを手動でチェックするのは非常に面倒であり、見逃してしまう可能性も高くなります。 解決そこで、2 つのデータベースのテーブル構造を自動的に比較し、ALTER ステートメントを生成できるプログラムを作成しました。これらの変更ステートメントを自動的に実行するように構成することもできます。詳細はgithubをご覧ください 原理新しく追加されたテーブルを同期する rd 環境に新しいテーブルが追加され、qa 環境に追加されていない場合、このプログラムは直接 create table ステートメントを出力できます。仕組みは次のとおりです: 主に使用される SQL は次のとおりです。 rd_db からテーブルを表示します。 テーブルadded_table_nameを作成します。 同期テーブルの構造 rd テーブル構造が変更されているが、qa 環境が変更されていない場合、このプログラムは alter ステートメントを直接出力できます。原理は次のとおりです。 使用されるSQLは次のとおりです。 選択 列名、列タイプ、IS_NULLABLE、列デフォルト、列コメント、追加 から 情報スキーマ列 どこ TABLE_SCHEMA='rd_db' TABLE_NAME = 'rd_table'; テーブル構造を比較するためのコード: for (列 column : sourceTable.getColumns().values()) { targetTable.getColumns().get(column.getName()) == nullの場合{ // 対応するターゲットにこのフィールドがない場合は、直接変更します 文字列 sql = "alter table " + target.getSchema() + "." + targetTable.getTableName() + "add " + 列 .getName() + " "; sql += 列.getType() + " "; (column.getIsNull().equals("NO"))の場合{ sql + = "NULLではありません"; } それ以外 { sql + = "NULL"; } (column.getDefaultValue() != null)の場合{ sql += "DEFAULT " + SqlUtil.getDbString(column.getDefaultValue()) + " "; } (column.getComment() != null)の場合{ sql += "コメント " + SqlUtil.getDbString(column.getComment()) + " "; } if (after != null) { sql += "後" + 後; } changeSql.add(sql+";"); } それ以外 { // 対応するソース属性とターゲット属性をチェックする String sql = "テーブルを変更" + target.getSchema() + "." + targetTable.getTableName() + "変更" + 列 .getName() + " "; 列ソースColumn = column; 列 targetColumn = targetTable.getColumns().get(sourceColumn.getName()); // 2 つのフィールドを比較します。null が返された場合は、一貫性があることを示します。String sqlExtend = compareSingleColumn(sourceColumn, targetColumn); (sqlExtend != null)の場合{ changeSql.add(sql + sqlExtend+";"); } } after = 列.getName(); } インデックス構造を同期するrd テーブルのインデックスが変更されたが、qa 環境が変更されていない場合、このプログラムは変更インデックスステートメントを直接出力できます。原理は上記と同様なので、ここでは繰り返しません。 構成 ソースホスト=127.0.0.1:3306 ソースユーザー=ルート ソースパス=123123123 ソーススキーマ=mystique_db ソースCharset=utf8 ターゲットホスト=127.0.0.1:3306 ターゲットユーザー=ルート ターゲットパス=123123123 ターゲットスキーマ=mystique_test ターゲット文字セット=utf8 autoExecute=YES //これは自動同期を示します 走る 上記のテンプレートに従って設定し、IDEで開きます。 alchemystar.runner.ShellRunner メインメソッドを実行するだけです 生成されたエフェクトの表示 mystique_test.t_test_3 テーブルを変更し、ID id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '' を変更します mystique_test.t_test_3 テーブルを変更し、インデックス (名前) を追加します。 テーブル mystique_test.t_test_3 を変更し、インデックス name_id を削除します。 テーブル mystique_test.t_test_3 を変更し、名前の後に id_2 varchar(50) NULL DEFAULT '' COMMENT '' を追加します。 自動実行がオンになっている場合、これらのステートメントは自動的に実行されます githubリンク https://github.com/alchemystar/ランサー コードクラウドリンク https://git.oschina.net/alchemystar/ランサー 要約するこれで、MySql 開発とテーブル構造の自動同期に関するこの記事は終了です。MySql テーブル構造の自動同期に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 複数の Tomcat を展開して起動し、プロジェクトを移行する方法を 1 つの記事で学習します。
最初で最も重要なステップは、Windows 環境に Ngnix サービスをインストールする方法です。...
目次JSはFileReaderを通じて.txtファイルの内容を取得します。 .txtファイルの読み取...
目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...
序文この記事では、Windows 10 システムで MySQL を完全に削除してアンインストールする...
目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...
1つ。序文<br />この種の質問は、どの専門掲示板でも見かけます。Google で検索...
公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...
目次1. v-text テキストレンダリング命令2. v-html 1. v-text テキストレン...
目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...
多くの人が MySQL の起動時にこのエラーに遭遇しています。まず、このエラーの前提は、サービス ス...
一つの環境Alibaba Cloud Server: CentOS 7.4 64 ビット (RedH...
1: mysql公式サイトからダウンロードhttps://dev.mysql.com/downlo...
1. データ整合性の概要1. データ整合性の概要データの冗長性とは、データベース内に重複したデータが...
目次識別子の長さ制限権限テーブルの範囲フィールドの長さ制限データベースとテーブルの数の制限テーブルサ...
a および href 属性 HTML では、英語ではアンカーと呼ばれるハイパーリンクを表すために &...