在项目中 我们可能遇到修改表名的需求 比如数据库中 部分表名带有前缀 部分表不带前缀 如果我想去掉这些带前缀的部分表名 应该怎么做呢?
使用代码层面修改太麻烦 不如直接使用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;
亲测有效~
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论