在mysql存储过程中动态拼接sql并执行

在备份、迁移、恢复数据库的时候,要从mysql8.0版本迁移到5.7版本库中,在迁移的过程中有些表字段设置了字符类型为 utf8mb4_0900_ai_ci ,但这个字符类型在5.7中是没有的,因此如果一个一个去改怕是改一个月去了。有些同学使用代码编程,在项目中连接数据库去修改,也是可以的,但是我不想这么麻烦,就用了存储过程。下面介绍怎么用存储过程批量修改表字段字符类型。

1.首先写一个sql查看哪些表和字段需要修改:

SELECT TABLE_NAME, COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_TYPE,COLUMN_COMMENT COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'test' and collation_name = 'utf8mb4_0900_ai_ci';

2.然后编写一个存储过程脚本,去批量修改:

drop procedure if exists modify_collation;

DELIMITER //
create PROCEDURE modify_collation(out origin_num int(10),out count_num int(10))
COMMENT 'modify_collation' 
SQL SECURITY DEFINER
BEGIN
	DECLARE t_name VARCHAR(100);
	declare c_name VARCHAR(100);
	declare c_type VARCHAR(20);
	declare c_comment VARCHAR(
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DN金猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值