当前位置: 首页 > article >正文

【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


http://www.kler.cn/news/329409.html

相关文章:

  • 《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计
  • 西电25考研 VS 24考研专业课大纲变动汇总
  • Oracle EBS中 预算编制与计划 模块的财务流程概览
  • golang web笔记-2.请求request
  • 大表性能优化的关键技术
  • 【Vue】从后端返回数据如何保留文本的格式,包括换行
  • 数据库查询
  • 注册安全分析报告:科研诚信查询平台无验证方式导致安全隐患
  • buuctf [ACTF2020 新生赛]Include
  • 面试题05.08绘制直线问题详解(考察点为位运算符)
  • 软件设计模式概述
  • 面试题:MySQL你用过WITH吗?领免费激活码
  • PHP安装后Apache无法运行的问题
  • [Redis][主从复制][上]详细讲解
  • CSS全解析
  • 滚雪球学MySQL[10.2讲]:数据库性能问题排查详解:从慢查询优化到内存与CPU使用分析
  • DES、3DES 算法及其应用与安全性分析
  • 【RabbitMQ 项目】客户端:连接模块
  • CSP 安全配置案例
  • 【设计模式-命令】
  • Elasticsearch学习笔记(1)
  • 二、词法分析,《编译原理》(本科教学版),第2版
  • 【MySQL基础刷题】总结题型(一)
  • 简单的微信小程序个人 个人详情页
  • WebUI密码被锁定
  • NCU-机器学习-作业3:基于SVM的手写字识别
  • linux ip命令使用
  • 大数据毕业设计选题推荐-热门微博数据可视化分析系统-Hive-Hadoop-Spark
  • C动态内存管理
  • 【在Linux世界中追寻伟大的One Piece】System V共享内存