在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

mysql的存储过程、游标 、事务有什么用

148次阅读
没有评论

共计 2114 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家分享的是有关 mysql 的存储过程、游标、事务有什么用的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考。一起跟随丸趣 TV 小编过来看看吧。

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 的存储过程、游标、事务有什么用就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计2114字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久久人人人婷婷色东京热 | 97久人人做人人妻人人玩精品 | 人妻无码视频一区二区三区 | 四虎影视在线看免费观看 | 中文字幕无线码中文字幕免费 | 成人欧美一区二区三区的电影 | 久久 精品 | 伊人天堂av无码av日韩av | 男人天堂亚洲天堂 | 看黄网站在线观看 | 亚州第一视频 | 亚洲一区二区三区在线网站 | 欧美1314www伊人久久香网 | 久久久免费网站 | 亚洲日韩精品无码专区加勒比 | 欧美s级人做人爱c视频 | 无码人中文字幕 | 超级香蕉97视频在线观看一区 | 豆国产96在线 | 亚洲 | 曰韩人妻无码一区二区三区综合部 | 欧美在线观看免费一区视频 | 久久亚洲福利 | 欧美成人a大片 | 国产成人精品成人a在线观看 | 99国产精品久久久久久久日本 | 熟妇人妻系列av无码一区二区 | 少妇伦子伦情品无吗 | 亚洲欧美日韩中文字幕久久 | 国内精品久久久人妻中文字幕 | 日韩一区二区三区电影在线观看 | 女人一级特纯黄大片色 | 欧美伦费免费全部午夜最新 | 亚洲欧洲日本国产 | 亚洲欧美日韩精品专区卡通 | 91精品啪在线观看国产91九色 | 九九热视频免费在线观看 | 国产亚洲欧美日韩在线观看不卡 | 免费无码黄十八禁网站在线观看 | 最近在线更新8中文字幕免费 | 亚洲精品国产综合久久一线 | 国产日产精品_国产精品毛片 |