2017-05-01 17 views
0

私はそれが単一のテーブルのために簡単です知っている、あるデータベースから別のデータベースにいくつかのテーブルを移動したい、私はすでにこのため、次のコマンドを使用しているし、それが完璧に動作します:MySQLのあるデータベースから別のデータベースへテーブルを移動するには?

alter table my_old_db.mytable rename my_new_db.mytable 

が、今シナリオがあります違いは、私はすべてのテーブルを "_mp"で終わる新しいデータベースに移動する必要があります。

+0

あなたは、サーバー側を行うことができます...あなたが必要とするテーブル名を取得し、これらの名前に基づいてSQLを作成するための選択を使用してあなたが必要とするすべてのコマンドをループで実行してください。 – scaisEdge

答えて

4

これを行う方法は、外部ファイルを経由することです。これは私の意図です。

function changeSchema($oldName, $newName, $type, $len) 
{ 
    $res = mysql_query("SELECT DISTINCT TABLE_NAME 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_NAME LIKE '%_mp' AND 
     TABLE_SCHEMA = 'your_database_name'"); 
    if($res){ 
     while($line=mysql_fetch_object($res)){ 
      mysql_query("ALTER TABLE db1.$line->TABLE_NAME rename db2.$line->TABLE_NAME"); 
     } 
    } 
} 
+0

私にはうってつけですが、 'information_schema.TABLES'をクエリする方が良いでしょうか? – Phil

+0

あなたは 'SELECT'クエリでいくつかの不適切な引用符も持っています – Phil

+0

@Philありがとう私の誤植... :) –

1

これは1つのステートメントでは実行できません。 RENAME TABLEまたはALTER TABLEステートメントにはワイルドカードはサポートされていません。

少なくともRENAME TABLEは、1つのステートメントで複数のテーブルの名前を変更できますが、固定テーブル名を指定するだけです。だから、1回のパスですべてのテーブルを移動させRENAME TABLE文を生成することができます。

SELECT CONCAT('RENAME TABLE ', 
    GROUP_CONCAT(CONCAT('my_old_db.`', TABLE_NAME, '` TO my_new_db.`', TABLE_NAME, '`')), 
    ';') AS _sql 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA='my_old_db' AND TABLE_NAME LIKE '%\_mp'; 
関連する問題