web-dev-qa-db-ja.com

MySQL DBのすべてのテーブルのプレフィックスを変更するにはどうすればよいですか?

プロバイダーが私のサイトにインストールされましたDrupal CMS。今、古いサイトからすべてのデータをコピーする必要があります。古いDBにプレフィックスのないテーブルがありますが、新しいDBにはすべてのテーブルにdp_[table_name]接頭辞。

25
SkyFox

zerkmsソリューションが機能しませんでした。 Tablesテーブルをクエリできるようにするには、information_schemaデータベースを指定する必要がありました。

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test';

編集:

RENAME TABLEを1回だけ呼び出すようにクエリを最適化しました。私が調べたのは、連結された出力が341文字で切り捨てられるという事実でした。これは、MySQL変数group_concat_max_lenをより高い値に設定することで解決できます(サーバーで許可されている場合)。

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters.
28
Koen.

各テーブルに対してRENAME TABLEを実行するスクリプトを記述します。

SELECT 
  GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ')
FROM 
  `TABLES` WHERE `TABLE_SCHEMA` = "test";

「test」は予想されるデータベース名です

この後、実行するとプレフィックスを追加する長いクエリを実行できます;-)

21
zerkms

PhpMyAdminを使用すると、これをすぐに実行できます。 「データベース」レベルで「構造」タブを選択して、すべてのテーブルを表示します。 (表リストの下にある)「すべてチェック」をクリックします。 [選択済み]ドロップダウンで、[テーブルプレフィックスを置き換える]を選択します。

16
foray

データベースをダンプし、テキストエディターでダンプを開き、「CREATE TABLE」のすべての出現箇所を「CREATE TABLE dp_」で置き換え、データベースを復元できます。完了するまで数分かかります。

これを行う方法を疑問に思っている人がいる場合(他のオプションではうまくいかなかったため)、これを実行できます(もちろん、最初の3つの変数を値に変更します)。

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    concat(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        replace(TABLE_NAME, @old_prefix, @new_prefix),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

次に、データベース内のすべてのテーブルを変更するために必要な一連のクエリが表示されます。あなたは単にそれをコピーし、それを実行してボイラするだけです!

0
Juli15