2011-06-19 39 views
3

我有一個joomla mysql數據庫,其表名前綴爲「jos_」,位於我的所有表名稱中。但我想從我的所有表格中刪除它。我知道如何重新命名每個表,但是我有600個表。有沒有一個簡單的運行SQL查詢來做到這一點。如何刪除mysql數據庫中每個表名的前綴名稱

如果有人有一個解決方案,你可以請發佈確切的SQL查詢我可以使用?

+0

我希望,這裏不存在任何內部依賴! – Strawberry

回答

11

您可以生成一個查詢語句進行必要的:

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

保存了該查詢到一個文件的輸出,你擁有你所需要的報表。

或者,如果返回0 S和1做得相當的statemenets,使用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的存儲過程,我跑進6年bug #5967這是很煩人,你的變量名必須與字段名稱不同,因爲如果他們沒有你」在你的變量中會得到NULL的值。

所以要注意,如果你決定編寫一個MySQL存儲過程。

9
  1. 在phpmyadmin 選擇您的數據庫的所有表
  2. 從下拉菜單 '項:' 選擇'替換表前綴'
  3. 設置從 - >到更換。
  4. DONE
+0

OMG。這個解決方案非常棒。這就是你如何做到的 – Fury

相關問題