開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、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 つの記事で学習します。
1. Apacheサーバーのインストールと設定yum インストール httpd -y systemc...
フロントエンド開発でよく使われるCSSの配置方法は、位置決めには、通常位置決め、相対位置決め、絶対位...
前面に書かれたLinux を使用する際にソフトウェアをインストールする必要がある場合があります。もち...
インストールとアンインストールの表示 # rpm -qa | grep mysql を表示 # アン...
この記事では、Java接続MySQLの基礎となるカプセル化コードを参考までに紹介します。具体的な内容...
フレームセット ページは通常の Web ページとは多少異なります。依然として <HTML>...
データベースのパフォーマンスに関する話面接では、「データベースにどのくらい精通していますか?」など、...
データ ボリューム コンテナーは、データ ボリュームをマウントするために特別に使用されるコンテナーで...
目次1. スイッチ2. whileループ3. Do/Whileループ3. 文字列を数値に変換する1....
効果は以下のとおりです。参考プログラム: <!DOCTYPE html> <htm...
目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...
目次1. 現象2. 解決策3. 要約: 1. 現象1. 要件: 特定の表示ページをキャプチャしてアル...
crontab コマンドは、Unix および Linux で定期的な実行命令を設定するために使用され...
詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...
HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...