プロバイダーが私のサイトにインストールされましたDrupal CMS。今、古いサイトからすべてのデータをコピーする必要があります。古いDBにプレフィックスのないテーブルがありますが、新しいDBにはすべてのテーブルにdp_[table_name]
接頭辞。
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.
各テーブルに対して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」は予想されるデータベース名です
この後、実行するとプレフィックスを追加する長いクエリを実行できます;-)
PhpMyAdminを使用すると、これをすぐに実行できます。 「データベース」レベルで「構造」タブを選択して、すべてのテーブルを表示します。 (表リストの下にある)「すべてチェック」をクリックします。 [選択済み]ドロップダウンで、[テーブルプレフィックスを置き換える]を選択します。
データベースをダンプし、テキストエディターでダンプを開き、「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;
次に、データベース内のすべてのテーブルを変更するために必要な一連のクエリが表示されます。あなたは単にそれをコピーし、それを実行してボイラするだけです!