详细讲解mysql的存储过程、游标 、事务

本文主要介绍了mysql存储过程、游标 、事务实例详解的相关资料,这里举实例说明MySQL 存储过程与游标和事务,需要的朋友可以参考下,希望能帮助到大家。

相关mysql视频教程推荐:《mysql教程》

mysql的存储过程、游标 、事务实例详解

下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考。

其中,涉及到了存储过程、游标(双层循环)、事务。

【说明】:代码中的注释只针对当时业务而言,无须理会。

代码如下:

存了个图 存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17 查看详情 存了个图

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的存储过程、游标 、事务的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/386469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用WebRTC实现前端摄像头实时录像及后端实时预览监控?
上一篇 2025年11月6日 13:45:20
《逆战:未来》樱之城打法攻略
下一篇 2025年11月6日 13:45:24

相关推荐

  • 怎么查看mysql是多少位

    怎么查看mysql是多少位怎么查看mysql是多少位怎么查看mysql是多少位怎么查看mysql是多少位

    查看mysql位数的两种方法:1、在cmd命令窗口中,使用cd命令进入mysql安装目录的bin目录中,再执行“mysql -V”或“mysql –version”命令,即可在输出结果中查看到位数信息。2、在mysql控制台中,执行“show variables like ‘…

    2026年8月30日 用户投稿
    000
  • laravel支持几种数据库

    Laravel 支持多种数据库连接,包括:MySQL、PostgreSQL、SQLite、SQL Server、MariaDB、MongoDB 和 Redis。要连接到数据库,您需要在 .env 文件中设置配置并使用 DB 外观进行连接。 Laravel 支持的数据库 Laravel 是一个 PHP…

    2026年8月30日
    000
  • mysql是否支持分区

    mysql是否支持分区mysql是否支持分区mysql是否支持分区mysql是否支持分区

    mysql从5.1版本开始支持分区功能。MySQL5.1中分区表达式必须是整数,或者返回整数的表达式;而MySQL5.5中提供了非整数表达式分区的支持。MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引;也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。My…

    2026年8月30日 用户投稿
    100
  • mysql怎么查询字段名称

    mysql怎么查询字段名称mysql怎么查询字段名称mysql怎么查询字段名称mysql怎么查询字段名称

    查询方法:1、在cmd窗口中,执行“mysql -u root -p”命令登录MySQL数据库;2、使用USE命令切换到指定数据库下,语法“USE 数据库名;”;3、使用DESCRIBE或DESC命令来查询字段名称,语法“DESCRIBE 表名;”或“DESC 表名;”,输出结果是表格形式,展示了表…

    2026年8月30日 用户投稿
    000
  • mysql怎么删除数据库

    mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库

    删除方法:1、使用“win+r”键打开“运行”窗口,输入“cmd”,回车进入cmd命令窗口;2、在cmd窗口中,执行“mysql -u root -p”命令登录MySQL服务器;3、执行“DROP DATABASE IF EXISTS 数据库名;”命令来删除指定数据库中的所有表并永久删除该数据库,“…

    2026年8月30日 用户投稿
    000
  • mysql怎么将值转换为二进制

    mysql怎么将值转换为二进制mysql怎么将值转换为二进制mysql怎么将值转换为二进制mysql怎么将值转换为二进制

    3种转换方法:1、使用BIN()函数,可以返回指定数字的二进制值的字符串表示形式,语法“BIN(number)”,参数“number”是一个长整型(BIGINT)数。2、使用CONV()函数,可将一个进制转为另一个进制,语法“CONV(number,10,2)”,能返回指定数字的二进制值。3、使用B…

    2026年8月30日 用户投稿
    400
  • 一起聊聊MySQL全局锁

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于全局锁的相关问题,全局锁就是对整个数据库加锁。当我们对数据库加了读锁之后,其他任何的请求都不能对数据库加写锁了,下面一起来看一下,希望对大家有帮助。 推荐学习:mysql视频教程 数据库设计的初衷是处理并发问题的,作为多用户共享的资源,…

    2026年8月30日
    500
  • mysql中sum()函数怎么用

    mysql中sum()函数怎么用mysql中sum()函数怎么用mysql中sum()函数怎么用mysql中sum()函数怎么用

    在mysql中,sum()函数用于计算一组值或表达式的总和,语法为“SUM(DISTINCT expression)”,DISTINCT运算符允许计算集合中的不同值。sum()函数需要配合SELECT语句一起使用,如果在没有返回匹配行SELECT语句中使用SUM()函数,则SUM()函数会返回NUL…

    2026年8月30日 用户投稿
    000
  • Sublime连接Docker MySQL容器数据库_支持容器化开发环境统一配置

    Sublime连接Docker MySQL容器数据库_支持容器化开发环境统一配置Sublime连接Docker MySQL容器数据库_支持容器化开发环境统一配置Sublime连接Docker MySQL容器数据库_支持容器化开发环境统一配置Sublime连接Docker MySQL容器数据库_支持容器化开发环境统一配置

    要使用 sublime 连接运行在 docker 容器中的 mysql 数据库,首先要确保容器配置正确并开放远程访问权限。具体步骤包括:1. 启动容器时添加 -p 3306:3306 参数实现端口映射;2. 创建允许从外部连接的 mysql 用户,如 ‘root’@&#821…

    2026年8月30日 用户投稿
    000
  • 怎么让mysql不区分大小写

    让mysql不区分大小写的方法:1、进入mysql的安装目录,找到并打开配置文件“my.ini”;2、在配置文件的最后一行加上“lower_case_table_names=1”语句,设置大小写敏感参数“lower_case_table_names”,让mysql对大小写不敏感;3、重启mysql服…

    2026年8月30日
    000
  • mysql的安装路径怎么查看

    mysql的安装路径怎么查看mysql的安装路径怎么查看mysql的安装路径怎么查看mysql的安装路径怎么查看

    查看方法:1、鼠标右击“计算机”图标,在打开的菜单中点击“管理”;2、依次点击“服务和应用程序”-“服务”;3、在右侧服务列表中,找到mysql服务;4、选中mysql服务,点击鼠标右键,在打开的菜单中选择“属性”;5、在“mysql属性”弹窗中,查看“可执行文件路径”选项的值即可,该选项的值就是M…

    2026年8月30日 用户投稿
    500
  • mysql怎么关闭事务

    mysql怎么关闭事务mysql怎么关闭事务mysql怎么关闭事务mysql怎么关闭事务

    mysql关闭事务的步骤:1、使用“win+r”键打开“运行”窗口,输入cmd并回车,打开cmd命令窗口;2、在cmd窗口中,执行“mysql -u root -p”命令并输入密码来登录mysql服务,进入MySQL界面;3、在MySQL命令界面中,执行“start transaction;”或者“…

    2026年8月30日 用户投稿
    200
  • mysql中执行存储过程的语句是什么

    mysql中执行存储过程的语句是“CALL”。CALL语句可以调用指定存储过程,调用存储过程后,数据库系统将执行存储过程中的SQL语句,然后将结果返回给输出值;语法为“CALL 存储过程的名称([参数[…]]);”。mysql中利用CALL语句调用并执行存储过程需要拥有EXECUTE权限…

    2026年8月30日
    200
  • mysql与oracle有区别吗

    mysql与oracle有区别:1、Oracle是一个对象关系数据库管理系统(ORDBMS),而MySQL是一个关系数据库管理系统(RDBMS);2、Oracle是闭源的(收费),MySQL是开源的(免费);3、Oracle是大型数据库,而MySQL是中小型数据库;4、Oracle可设置用户权限、访…

    2026年8月30日
    100
  • 怎么查询mysql中所有表

    怎么查询mysql中所有表怎么查询mysql中所有表怎么查询mysql中所有表怎么查询mysql中所有表

    查询mysql数据库中所有表的方法:1、执行“mysql -u root -p”命令并输入密码来登录mysql数据库服务器;2、执行“USE 数据库名;”命令来切换到指定数据库;3、执行“show tables;”或“SHOW FULL TABLES;”命令,会以表格形式列出mysql数据库中的所有…

    2026年8月30日 用户投稿
    100
  • MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?

    MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?MySQL全文检索和第三方搜索引擎整合方案有哪些_优缺点分析?

    mysql 自带的全文检索功能在面对复杂搜索需求时存在明显不足,常见的整合方案包括 elasticsearch + mysql、sphinx + mysql 和 lucene/solr + mysql。1. mysql 全文检索缺点:仅支持基础分词和自然语言搜索,对中文支持弱,索引更新成本高,不支持…

    2026年8月30日 用户投稿
    100
  • mysql怎么实现分组求和

    实现方法:1、利用SELECT语句查询指定表中的数据;2、利用“GROUP BY”关键字根据一个或多个字段对查询结果进行分组;3、利用SUM()函数根据分组情况分别返回不同组中指定字段的总和,语法为“SELECT SUM(进行求和的字段名) FROM 表名 GROUP BY 需要进行分组的字段名;”…

    2026年8月30日
    100
  • mysql怎么将字段修改为not null

    mysql怎么将字段修改为not nullmysql怎么将字段修改为not nullmysql怎么将字段修改为not nullmysql怎么将字段修改为not null

    在mysql中,可以通过使用ALTER TABLE语句给字段添加非空约束来将字段修改为not null,语法“ALTER TABLE 数据表名 CHANGE COLUMN 字段名 字段名 数据类型 NOT NULL;”。ALTER TABLE语句用于修改原有表的结构,而“NOT NULL”是设置非空…

    2026年8月30日 用户投稿
    100
  • mysql怎么修改存储引擎为innodb

    mysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodbmysql怎么修改存储引擎为innodb

    两种修改方法:1、使用SET语句临时修改默认存储引擎,语法为“SET default_storage_engine=innodb;”,当重启客户端后就会恢复为原引擎类型。2、使用ALTER TABLE语句修改,语法“ALTER TABLE 表名 ENGINE=innodb;”,可以修改指定表的引擎类…

    2026年8月30日 用户投稿
    200
  • 如何在Laravel中使用JSON键解决Eloquent关系问题?staudenmeir/eloquent-json-relations助你提升数据库查询效率

    最近在开发一个 laravel 项目时,我遇到一个挑战:需要在用户和角色之间建立多对多关系,但角色信息存储在用户模型的 json 字段中。传统的 eloquent 关系无法直接处理这种情况,导致我在实现关系时遇到了诸多困难。经过一番探索,我找到了 staudenmeir/eloquent-json-…

    用户投稿 2026年8月30日
    000

发表回复

登录后才能评论
关注微信