• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql存储过程修改表的engine

mysql 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

因公司需要将多个schema下所有使用MyISAM引用的表更改为InnoDB引擎,所以就定了个存储过程来实现 delimiter // –存储过程中可以使用分号 drop procedure if exists `alter_engine`// — 若已存在则删除 create procedure `alter_engine`(in schema_name_in

因公司需要将多个schema下所有使用MyISAM引用的表更改为InnoDB引擎,所以就定了个存储过程来实现

delimiter // –存储过程中可以使用分号
drop procedure if exists `alter_engine`// — 若已存在则删除
create procedure `alter_engine`(in schema_name_in varchar(30)) –输入参数:schema名称
begin
declare alter_sql varchar(100); –用于获取游标查询生成的sql语句
declare stop_flag int; –游标循环是否结束的标志

/*获取指定schema下面使用MyISAM engine的表 , 并直接组装成 alter table table_name engine = InnoDB的SQl语句*/
declare table_name_cur cursor for select concat(‘alter table ‘,table_name,’ ENGINE=InnoDB; ‘)
from information_schema.tables where table_schema = schema_name_in and engine = ‘MyISAM’;
/本文来源gaodai#ma#com搞@@代~&码网^*循环结束标志*/

declare continue handler for not found set stop_flag = 1;

set stop_flag = 0;

open table_name_cur;
repeat
fetch table_name_cur into alter_sql;
if stop_flag = 0 then
/*prepare from 后面的变量必须是@开头*/

set @alter_sql = alter_sql;
prepare s1 from @alter_sql;
execute s1;

/*显示回收s*/
deallocate prepare s1;
end if;
UNTIL stop_flag = 1
END REPEAT;
CLOSE table_name_cur;
END;
//

/*切换回系统默认的命令结束标志*/
delimiter ;


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql存储过程修改表的engine

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址