网站首页 > 博客文章 正文
例子
-- 秒杀执行存储过程 DELIMITER $ -- 将分隔符; 转换为 $ -- 定义存储过程 -- 参数: in 输入参数; out 输出参数 -- row_count():返回上一条修改类型sql(delete,insert,update)的影响行数 -- row_count: 0:未修改数据; >0:表示修改的行数; <0:sql错误/未执行修改sql CREATE PROCEDURE `seckill`.`execute_seckill` (in v_seckill_id bigint,in v_phone bigint, in v_kill_time timestamp,out r_result int)--创建储存过程 BEGIN-- 开始执行 DECLARE insert_count int DEFAULT 0;-- 定义变量 START TRANSACTION;--开启事物管理 insert ignore into success_killed (seckill_id,user_phone,create_time) values (v_seckill_id,v_phone,v_kill_time);--执行insert语句 select row_count() into insert_count;--返回影响行数 IF (insert_count = 0) THEN ROLLBACK;--事务回滚 set r_result = -1;--返回未修改数据 ELSEIF(insert_count < 0) THEN ROLLBACK;--事务回滚 set R_RESULT = -2;--返回未知错误 ELSE update seckill set number = number-1 where seckill_id = v_seckill_id and end_time > v_kill_time and start_time < v_kill_time and number > 0;--执行update语句 select row_count() into insert_count;--返回影响行数 IF (insert_count = 0) THEN ROLLBACK;--事务回滚 set r_result = 0;--返回未修改数据 ELSEIF (insert_count < 0) THEN ROLLBACK;--事务回滚 set r_result = -2;--返回未知错误 ELSE COMMIT;--提交,事务结束 set r_result = 1;--返回执行成功 END IF;--结束IF语句 END IF;--结束IF语句 END;--结束储存过程 $--结束sql -- 存储过程定义结束 DELIMITER ;--还原分隔符为; -- set @r_result=-3;--定义用户变量 -- 执行存储过程 call execute_seckill(1003,13502178891,now(),@r_result); -- 获取结果 select @r_result; -- 存储过程 -- 1:存储过程优化:事务行级锁持有的时间 -- 2:不要过度依赖存储过程 -- 3:简单的逻辑可以应用存储过程 -- 4:QPS:一个秒杀单6000/qps
1.储存过程参数
- IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
- OUT:该值可在存储过程内部被改变,并可返回
- INOUT:调用时指定,并且可被改变和返回
- [IN|OUT|INOUT] 参数名 数据类型
- 比如: IN number INT
- 例子:
DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
2.Mybatis调用储存过程
<!-- statementType 声明指向的是什么类型,其中CALLABLE是执行存储过程和函数的--> <select id="killByProcedure" parameterType="map" statementType="CALLABLE"> call execute_seckill( #{seckillId,jdbcType=BIGINT,mode=IN}, #{phone,jdbcType=BIGINT,mode=IN}, #{killTime,jdbcType=TIMESTAMP,mode=IN}, #{result,jdbcType=INTEGER,mode=OUT} ) </select>
原文链接:http://suo.im/4p3v48 作者:薛勤
猜你喜欢
- 2024-09-11 kubernetes基础知识之项目部署(k8s项目部署)
- 2024-09-11 聊聊kingbus的startMasterServer(聊聊日常电视剧全集免费)
- 2024-09-11 这篇Redis文章,图灵看了都说好(redis原理图)
- 2024-09-11 PT-KILL长尾慢SQL有时失灵?自写脚本更靠谱
- 2024-09-11 基于 Spring Boot 的电商秒杀系统 jseckill
- 2024-09-11 技术分享 | 从库 MTS 多线程并行回放(一)
- 2024-09-11 常用数据库的最大连接数的获取和修改
- 2024-09-11 MySQL 调试环境搭建:VSCode + Docker
- 2024-09-11 Linux服务器百万并发实现与问题排查
- 2024-09-11 Elasticsearch + Logstash + Kibana 安装(全)
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)