1

私のアプリケーションでは、テーブルとストア プロシージャを含むスキーマをベース スキーマから新しいスキーマにコピーする必要があります。

これを実装する方法を探しています。cmd を使用して mysqldump を厳密に調べましたが、クライアント側のアプリケーションがあり、クライアント側にサーバーをインストールする必要があるため、これは良い解決策ではありません。もう 1 つのオプションは、show query を使用した独自の埋め込みです。ここでの問題は、すべてを最初から実装する必要がないことであり、問​​題のある部分は、外部キーに従ってテーブルの順序を配置する必要があることです (テーブルに外部キーがある場合、テーブル i最初に作成する必要があることを指摘しています)。

これを行うストア プロシージャを作成することも考えましたが、SQL のストア プロシージャがディスクにアクセスできません。

おそらく誰かがこれを別の方法で実装する方法について考えを持っていますか?

4

2 に答える 2

2

Apache ddlutilsの使用を試すことができます。ddls をデータベースから xml ファイルにエクスポートし、再インポートする方法があります。

APIの使用方法のページには、スキーマを xml ファイルにエクスポートする方法、xml ファイルから読み取って新しいデータベースに適用する方法の例があります。私はあなたが求めていることを達成するためにそれを使用する方法についての小さなスニペットと一緒に以下にそれらの機能を再現しました. これを出発点として使用し、さらに最適化できます。

DataSource sourceDb;
DataSource targetDb;

writeDatabaseToXML(readDatabase(sourceDb), "database-dump.xml");
changeDatabase(targetDb,readDatabaseFromXML("database-dump.xml"));



public Database readDatabase(DataSource dataSource)
{
   Platform platform = PlatformFactory.createNewPlatformInstance(dataSource);
   return platform.readModelFromDatabase("model");
}

public void writeDatabaseToXML(Database db, String fileName)
{
    new DatabaseIO().write(db, fileName);
}

public Database readDatabaseFromXML(String fileName)
{
    return new DatabaseIO().read(fileName);
}

public void changeDatabase(DataSource dataSource,
                           Database   targetModel)
{
    Platform platform = PlatformFactory.createNewPlatformInstance(dataSource);
    platform.createTables(targetModel, true, false);
}
于 2012-08-09T07:27:26.780 に答える
0

を使用information_schemaして、外部キー情報をフェッチし、依存関係ツリーを構築できます。これがです。

しかし、あなたはこれまで何度も解決されてきた何かを解決しようとしていると思います。私はJavaに精通していませんが、現在のデータベースを検査し、Java(またはPython)で補完モデルを作成できるORMツール(少なくともPython用)があります。次に、そのモデルを別のデータベースにデプロイできます。

于 2012-08-09T06:48:13.007 に答える