<>mysql-存储过程-动态表名-修改表结构

<>背景

项目版本升级,有一张表需要增加字段,因为表名是随着日期动态变化的,所以打算在升级sql中写一个存储过程,实现对动态表名的结构更改。数据库是mysql5.7.35。

<>存储过程实现
drop procedure if exists add_record_col; delimiter // create procedure
add_record_col() begin -- 声明当前的数据库 declare CurrentDB varchar(256); -- 声明要改动的表名
declare TableName varchar(256); -- 将当前的数据库名称赋值给CurrentDB select database() into
CurrentDB; -- 通过字符串拼接的方式动态拼接表名赋值给TableName select concat('record_',date_format(
now(),'%Y_%m_%d')) into TableName; -- 如果没有rule_id这个字段,就增加 if not exists(select *
from information_schema.COLUMNS where TABLE_SCHEMA = CurrentDB and TABLE_NAME =
TableNameand COLUMN_NAME = 'rule_id') then set @stmt = concat("alter table ",
TableName, " add `rule_id` varchar(20) default null comment '规则编号';"); prepare
stmtfrom @stmt; execute stmt; end if; end // delimiter ; call add_record_col();
<>注意点

set @stmt = concat("alter table “, TableName, " add rule_id varchar(20)
default null comment ‘规则编号’;”);

这里不能直接 alter table TableName add rule_id varchar(20) default null comment
‘规则编号’;MySQL默认不支持表名作为变量名。需要预定义sql语句执行。

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信