当前位置: 代码网 > it编程>数据库>Mysql > Mysql批量修改表名实现去掉表前缀

Mysql批量修改表名实现去掉表前缀

2025年09月22日 Mysql 我要评论
在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我想去掉这些带前缀的部分表名 应该怎么做呢?使用代码层面修改太麻烦 不如直接使用mysql脚本达到目标 mys

在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我想去掉这些带前缀的部分表名 应该怎么做呢?

使用代码层面修改太麻烦 不如直接使用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 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 ;

-- 执行存储过程
call batch_rename_tables();

-- 清理
drop procedure batch_rename_tables;
drop temporary table temp_rename_mapping;

亲测有效~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com