目录
- 需求
- 步骤
- 1. 先验证 执行前先运行以下查询确认要修改的表
- 2. mysql版本检查
- 3. 分步执行RENAME TABLE
- 总结
在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我想去掉这些带前缀的部分表名 应该怎么做呢?
使用代码层面修改太麻烦 不如直接使用mysql脚本达到目标 mysql版本要求在 5.7+
需求
将数据库中带有 sw_ 前缀的表 修改表名 去掉sw_
步骤
1. 先验证 执行前先运行以下查询确认要修改的表
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. 分步执行RENAME TABLE
-- 步骤1:创建临时表存储重命名映射 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:生成并执行单个RENAME语句(更安全的方式) DELIMITER // CREATE PROCEDURE BATch_rename_tables() BEGIN DECLARE done INT DEFAULTandroid FALSE; DECLARE old_tbl VARCHAR(255); DECLARE new_tbl VARCHAR(255); DECLARE cur CURSOR FOR SELECT old_name, new_name FROM temp_rename_mapping; DEC编程客栈LARE 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; SEhttp://www.devze.comT @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 ; -- 执行存储过程 CALL batch_rename_tables(); -- 清理 DROP PROCEDURE batch_rename_tables; DROP TEMPORARY TABLE temp_rename_mapping;
亲测有效~
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.cphttp://www.devze.compcns.com)。
精彩评论