1

5 つの同一スキーマ (完全に同一ではありませんが、フィールド名を編集して同一にすることができます) の MySQL データベースを 1 つのデータベースにマージしたいと考えています。簡単な方法はありますか?

CREATE TABLE `users` (
    `name` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    `surname` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    `telephone` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    PRIMARY KEY (`id`),

) ENGINE = MyISAM AUTO_INCREMENT = 1000 DEFAULT CHARSET = utf8 COLLATE = utf8_turkish_ci PACK_KEYS = 0 ROW_FORMAT = DYNAMIC
4

3 に答える 3

1

Clover などのどの ETL ツールも、この目的に適しています。列のマッピングを定義するだけで、準備完了です。さらにヘルプが必要な場合は、コメントを残してください。

于 2013-05-21T18:34:59.517 に答える
1

これを行う簡単な方法はありません。

異なるデータベース内のテーブルを変更して、それらを最も類似した形式にすることができます。

さらに、次のようなステートメントを使用できます。

Create table as select

データをさらにフォーマットするため。

すべてのデータベースの MYSQL DUMP を実行する必要があるよりも。関心のあるデータベース スキーマから create ステートメントのみを選択し、すべての異なるデータベースから (データ用の) insert ステートメントを追加します。

互換性があり、最終的なスキーマに挿入できるような形式でデータを取得するために、Excel または mysql でテキスト操作を実行する必要がある場合もあります。

于 2013-05-21T18:31:29.677 に答える
1

テーブルの列名/タイプがまったく同じで、名前が付けられている場合

  • ユーザー1
  • ユーザー2
  • ユーザー3
  • ユーザー4
  • ユーザー5

これを処理するには、次の 2 つの方法があります。

アプローチ #1 : データを 1 つのテーブルにロードする

CREATE TABLE user LIKE user1;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user1;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user2;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user3;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user4;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user5;

ID が auto_increment の場合、すべての行が新しい ID を取得します。

アプローチ #2 : MERGE ストレージ エンジンを使用する

CREATE TABLE user LIKE user1;
ALTER TABLE user
    ENGINE=Mrg_MyISAM
    UNION=(user1,user2,user3,user4,user5)
;

試してみる !!!

于 2013-05-21T21:42:31.800 に答える