欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 【MySQL】逐一更新数据(字段唯一)-存储过程

【MySQL】逐一更新数据(字段唯一)-存储过程

2024/10/25 12:16:48 来源:https://blog.csdn.net/qq_39803142/article/details/142559905  浏览:    关键词:【MySQL】逐一更新数据(字段唯一)-存储过程

工作中遇到个问题,某一个字段要变成唯一,要对原表几千条数据进行修改,如何处理?

当然方法很多,可以用代码实现,用列表存所有id,然后for循环列表分别用id进行更新。

代码实现反而简单。如果用sql,需要使用游标。

游标可以 逐条读取 结果集中的数据。可以理解成Python种的迭代器,如[ a = 1 for a in list]等。

下面是代码

create procedure update_res()
BEGIN/*定义变量,需要则定义 变量名,变量类型,默认值*/declare no_record int DEFAULT 0;declare counter varchar(100);/*定义游标使用的变量,这个是必须的*/declare new_xxx varchar(100);/*必须,定义游标,名称随意 ,for 后跟的是任意的查询语句 */declare cur_xxx CURSOR FOR select id from table_a where xx_code = 'xx';/*条件判断,没找到则变量赋值为1 */declare continue handler for not found set no_record = 1;/*必须,OPEN 打开游标*/open cur_xxx;/*必须,游标指向第一行,同时游标写入变量 */fetch cur_xxx into new_xxx;/*必须,循环判断 */WHILE new_xxx != 1 DO/*赋值变量,这里直接用字符串+id(上面游标查的是id,也可以用其他的替代) */set counter = concat('abc',new_xxx)/*要循环的语句,这里用上面的变量更新字段,因为查的是id 所以也保证了此字段唯一 */update table_a set res_xxx = counter where id = new_xxx;/*一次循环执行完成后取下一个游标 */FETCH  cur_record INTO akey;/**必须,结束循环 */END WHILE;/*必须,最后释放游标 */CLOSE  cur_xxx;  
END

调用、删除

/*调用存储过程 */
call update_res();
/*删除存储过程 */
drop procedure if exists update_res;

本文参照了MySql 循环执行语句,循环执行update,详细介绍【游标嵌套】_mysql 循环update-CSDN博客

游标介绍参考

https://zhuanlan.zhihu.com/p/473517036

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com