2011-06-19 24 views
3

私はすべてのテーブル名に "jos_"というテーブル名プレフィックスを持つjoomla mysqlデータベースを持っています。しかし、私はすべてのテーブルからそれを削除したいと思います。私は各テーブルの名前を一度に1つずつ変更する方法を理解していますが、600個のテーブルがあります。これを行うSQLクエリを実行するのは簡単ですか?mysqlデータベース内のすべてのテーブル名からプレフィックス名を削除する方法

誰かが解決策を持っている場合は、私が使用できる正確なSQLクエリを投稿できますか?

select 'RENAME TABLE ' || table_name || ' TO ' || substr(table_name, 5) ||';' 
from information_schema.tables 

をファイルに保存し、そのクエリの出力と、あなたが必要とするすべての文を持っている:

+0

をDONE! – Strawberry

答えて

11

あなたは、単一のクエリで必要な文を生成することができます。

それともそれは0 sおよびstatemenetsむしろ1秒を返した場合、ここでは代わりにconcatを使用したバージョンです:

select concat('RENAME TABLE ', concat(table_name, concat(' TO ', concat(substr(table_name, 5), ';')))) 
from information_schema.tables; 
+1

あなたは '||'ではなく 'concat'を探していました(とにかく私のMySQLのコピーは動作しません)。 –

+1

'||'は私のために働いていますが(私はANSIモードでインストールしています) –

+1

'||'が '0'と' 1'を返す人のために 'concat'バージョンを追加しました。 –

3

あなたは、あなたのテーブルの名前を変更するために、独自のストアドプロシージャを作成することができ、必要のないものに

delimiter // 
CREATE PROCEDURE rename_tables(IN db CHAR(255), IN srch CHAR(255), IN rplc CHAR(255)) 
BEGIN 
    DECLARE done INT DEFAULT 0; 
    DECLARE from_table CHAR(255); 
    DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=db; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cur1; 

    read_loop: LOOP 
    IF done THEN 
     LEAVE read_loop; 
    END IF; 

    FETCH cur1 INTO from_table; 
    SET @to_table = REPLACE(from_table, srch, rplc); 

    IF from_table != @to_table THEN 
     SET @rename_query = CONCAT('RENAME TABLE ', db, '.', from_table, ' TO ', @to_table, ';'); 

     PREPARE stmt FROM @rename_query; 
     EXECUTE stmt; 
     DEALLOCATE PREPARE stmt; 
    END IF; 

    END LOOP; 

    CLOSE cur1; 
END// 
delimiter ; 

使用法:

外部エディタのすべてを開くには、サーバー上で行われます更新

:「これが私の最初のMySQLのストアドプロシージャだったと私は、彼らはあなたがいない場合ので、非常に迷惑だったが古いbug #5967、あなたの変数名は、フィールド名と異なる必要があります6年に走りましたあなたの変数の値はNULLになります。

したがって、MySQLストアドプロシージャを作成する場合は注意が必要です。

9
  1. phpmyadmin データベースのすべてのテーブルを選択してください。
  2. が交換にfrom->を設定しを選択する 'テーブル接頭辞を置き換え': '選択して' ドロップダウンから


  3. は、私がここには内部の依存関係が存在しないことを願っています
+0

OMG。この解決策は素晴らしいです。それがあなたのやり方です – Fury

関連する問題