Mysql批量修改表名實現(xiàn)去掉表前綴
更新時間:2025年09月22日 09:25:20 作者:顧米楠
文章介紹了在MySQL 5.7+中批量去除表名前綴"sw_"的方法,包括驗證表名、版本檢查和分步執(zhí)行RENAME TABLE命令,建議先備份數(shù)據(jù),通過查詢生成重命名語句,逐個執(zhí)行以避免操作中斷,同時需注意應用代碼對表名的依賴性
在項目中 我們可能遇到修改表名的需求 比如數(shù)據(jù)庫中 部分表名帶有前綴 部分表不帶前綴 如果我想去掉這些帶前綴的部分表名 應該怎么做呢?
使用代碼層面修改太麻煩 不如直接使用mysql腳本達到目標 mysql版本要求在 5.7+
需求
將數(shù)據(jù)庫中帶有 sw_ 前綴的表 修改表名 去掉sw_
步驟
1. 先驗證 執(zhí)行前先運行以下查詢確認要修改的表
SELECT table_name AS original_name,
SUBSTRING(table_name, 4) AS new_name
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name LIKE 'sw_%';
2. MySQL版本檢查
SELECT VERSION();
注意 mysql版本需要 5.7+
3. 分步執(zhí)行RENAME TABLE
-- 步驟1:創(chuàng)建臨時表存儲重命名映射
CREATE TEMPORARY TABLE temp_rename_mapping (
old_name VARCHAR(255),
new_name VARCHAR(255)
);
-- 步驟2:插入需要修改的表名
INSERT INTO temp_rename_mapping
SELECT
table_name AS old_name,
SUBSTRING(table_name, 4) AS new_name
FROM
information_schema.tables
WHERE
table_schema = DATABASE()
AND table_name LIKE 'sw_%';
-- 步驟3:生成并執(zhí)行單個RENAME語句(更安全的方式)
DELIMITER //
CREATE PROCEDURE batch_rename_tables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE old_tbl VARCHAR(255);
DECLARE new_tbl VARCHAR(255);
DECLARE cur CURSOR FOR SELECT old_name, new_name FROM temp_rename_mapping;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO old_tbl, new_tbl;
IF done THEN
LEAVE read_loop;
END IF;
SET @rename_sql = CONCAT('RENAME TABLE `', old_tbl, '` TO `', new_tbl, '`');
PREPARE stmt FROM @rename_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
-- 執(zhí)行存儲過程
CALL batch_rename_tables();
-- 清理
DROP PROCEDURE batch_rename_tables;
DROP TEMPORARY TABLE temp_rename_mapping;
親測有效~
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql查詢條件not in 和 in的區(qū)別及原因說明
這篇文章主要介紹了mysql查詢條件not in 和 in的區(qū)別及原因說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

