我有一個joomla mysql數據庫,其表名前綴爲「jos_」,位於我的所有表名稱中。但我想從我的所有表格中刪除它。我知道如何重新命名每個表,但是我有600個表。有沒有一個簡單的運行SQL查詢來做到這一點。如何刪除mysql數據庫中每個表名的前綴名稱
如果有人有一個解決方案,你可以請發佈確切的SQL查詢我可以使用?
我有一個joomla mysql數據庫,其表名前綴爲「jos_」,位於我的所有表名稱中。但我想從我的所有表格中刪除它。我知道如何重新命名每個表,但是我有600個表。有沒有一個簡單的運行SQL查詢來做到這一點。如何刪除mysql數據庫中每個表名的前綴名稱
如果有人有一個解決方案,你可以請發佈確切的SQL查詢我可以使用?
您可以生成一個查詢語句進行必要的:
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;
很確定你正在尋找'concat',而不是'||'(不管用我的MySQL的副本,無論如何)。 –
'||'適用於我(但我以ANSI模式運行我的安裝) –
我爲'||'返回'0'和'1'的人添加了'concat'版本。 –
您可以創建自己的存儲過程來重命名錶,與你不需要
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存儲過程。
我希望,這裏不存在任何內部依賴! – Strawberry