mysql的存储过程、游标 、事务实例详解
发布时间 - 2026-01-11 02:36:50 点击率:次mysql的存储过程、游标 、事务实例详解

下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考。
其中,涉及到了存储过程、游标(双层循环)、事务。
【说明】:代码中的注释只针对当时业务而言,无须理会。
代码如下:
DELIMITER $$
DROP PROCEDURE IF EXISTS `transferEmailTempData`$$
CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24))
BEGIN
DECLARE idval VARCHAR(24) DEFAULT '';
DECLARE taskIdval VARCHAR(24) DEFAULT '';
DECLARE groupIdval VARCHAR(24) DEFAULT '';
DECLARE emailval VARCHAR(50) DEFAULT '';
/*标识正式表是否存在一条相同数据,即:groupId、email相同*/
DECLARE infoId VARCHAR(24) DEFAULT '';
/*标识事务错误*/
DECLARE err INT DEFAULT 0;
/*达到一定数量就进行提交,计数器*/
DECLARE counts INT DEFAULT 0;
/*标识是否回滚过*/
DECLARE isrollback INT DEFAULT 0;
/*游标遍历时,作为判断是否遍历完全部记录的标记*/
DECLARE done INTEGER DEFAULT 0;
/*获取临时表该任务的数据*/
DECLARE cur CURSOR FOR SELECT id,taskId,groupId,email FROM `t_email_data_temp` WHERE taskId=jobId;
/*根据群组id、email查询是否存在相同记录*/
DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e WHERE e.`group_id` = groupIdval AND e.`email_address` = emailval;
/* 出现错误,设置为1,只要发生异常就回滚*/
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1;
/*声明当游标遍历完全部记录后将标志变量置成某个值*/
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done=1;
/*开启事务*/
START TRANSACTION;
/*打开游标*/
OPEN cur;
/*使用LOOP循环遍历*/
out_loop:LOOP
/*将每一条结果对应的字段值赋值给变量*/
FETCH cur INTO idval,taskIdval,groupIdval,emailval;
IF done = 1 THEN
LEAVE out_loop;
END IF;
/*打开第二个游标*/
OPEN cur2;
SET done = 0;
FETCH cur2 INTO infoId;
/*如果正式表不存在相同groupId and email记录,添加到正式表*/
IF done = 1 THEN
/*插入正式表*/
INSERT INTO `t_email_info` VALUES(idval,emailval,groupIdval,0,'',NOW(),'admin',NOW(),'admin');
/*删除临时数据*/
DELETE FROM `t_email_data_temp` WHERE id = idval;
/*计数器,每1000条才提交*/
SET counts = counts + 1;
/*发生异常,回滚*/
IF err=1 THEN
SET isrollback=1;
ROLLBACK;
ELSE
IF counts = 1000 THEN
COMMIT;
/*达到1000条提交后,重置计数器*/
SET counts=0;
END IF;
END IF;
ELSE
/*已经存在相同记录,则删除该记录*/
IF done=0 THEN
DELETE FROM `t_email_data_temp` WHERE id = idval;
END IF;
END IF;
FETCH cur2 INTO infoId;
CLOSE cur2;
/*控制外部的循环,该步骤不能缺少,否则只循环一次就结束了*/
SET done=0;
END LOOP out_loop;
CLOSE cur;
/*如果没有发生过回滚事件,则更新task状态*/
/*如果回滚过,不更新task状态,下次执行任务的时候,会再次将剩余没有提交的数据进行添加到正式表*/
IF isrollback=0 THEN
UPDATE `t_email_task` t SET t.`if_finish` = 1 WHERE t.`id`=jobId;
END IF;
END$$
DELIMITER ;
以上就是mysql的存储过程、游标 、事务的讲解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# mysql的存储过程
# mysql的存储过程+游标
# +事务实例详解
# mysql存储过程 游标 循环使用介绍
# MySQL存储过程中游标循环的跳出和继续操作示例
# Mysql存储过程循环内嵌套使用游标示例代码
# mysql存储过程中使用游标的实例
# mysql动态游标学习(mysql存储过程游标)
# mysql存储过程之游标(DECLARE)原理与用法详解
# Mysql存储过程中游标的用法实例
# Mysql 存储过程中使用游标循环读取临时表
# MySql存储过程和游标的使用实例
# 遍历
# 存储过程
# 是否存在
# 如有
# 希望能
# 第二个
# 如果没有
# 不存在
# 后将
# 谢谢大家
# 设置为
# 发生过
# 群组
# 写过
# 就回
# 则更
# 出现错误
# 判断是否
# 疑问请
# 经编
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
电商网站制作价格怎么算,网上拍卖流程以及规则?
EditPlus中的正则表达式实战(5)
JavaScript数据类型有哪些_如何准确判断一个变量的类型
详解jQuery中的事件
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
微信小程序 input输入框控件详解及实例(多种示例)
香港服务器部署网站为何提示未备案?
如何在企业微信快速生成手机电脑官网?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
如何快速完成中国万网建站详细流程?
iOS正则表达式验证手机号、邮箱、身份证号等
高端智能建站公司优选:品牌定制与SEO优化一站式服务
昵图网官方站入口 昵图网素材图库官网入口
IOS倒计时设置UIButton标题title的抖动问题
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel怎么为数据库表字段添加索引以优化查询
Bootstrap整体框架之CSS12栅格系统
如何快速生成凡客建站的专业级图册?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
油猴 教程,油猴搜脚本为什么会网页无法显示?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何用已有域名快速搭建网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
如何快速搭建高效香港服务器网站?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何用免费手机建站系统零基础打造专业网站?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
如何在万网主机上快速搭建网站?
Laravel如何实现用户密码重置功能?(完整流程代码)
Java解压缩zip - 解压缩多个文件或文件夹实例
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
如何自定义建站之星网站的导航菜单样式?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
C语言设计一个闪闪的圣诞树
PythonWeb开发入门教程_Flask快速构建Web应用
Python进程池调度策略_任务分发说明【指导】
微信公众帐号开发教程之图文消息全攻略
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南

