mysql存储过程开启事务_mysql的存储过程会自动开启一个事务吗?
当你决定使用存储过程的时候,那么整个事务是在MYSQL端完成的。
对于事务竞争优化的主要一点就是减少事务锁时间。
你选择了使用存储过程就可以不用再代码中开启事务,深度优化即将事务SQL在MYSQL端执行(存储过程)
以下是类似的秒杀事务落地的存储过程
-- 秒杀执行存储过程
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)
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;
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;
END if;
END;
$$
-- 存储过程定义结束
DELIMITER ;
set @r_result=-3;
-- 执行存储过程
call execute_seckill(1003,18820116735,now(),@r_result);
-- 获取结果
select @r_result;
这属于并发优化的阶段了,不要过度依赖存储过程,其一般用于简单的逻辑
mysql存储过程开启事务_mysql的存储过程会自动开启一个事务吗?相关推荐
- mysql的存储过程与事务_mysql的存储过程与事务入门
存储过程是: 通过一系列的SQL语句, 根据传入的参数(也可以没有), 通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译.主要 ...
- mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决
在导入存储过程时经常遇见下列DECLARE报错的问题: ? Error Code : 1064 You have an error in your SQL syntax; check the manu ...
- mysql数据存储过程详解_mysql数据存储过程参数实例详解
MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...
- mysql 存储过程 生成数据_mysql使用存储过程,批量生成测试数据
1.存储过程代码 delimiter $$ DROP PROCEDURE IF EXISTS create_service_data$$ create procedure create_service ...
- mysql建立存储过程报错_MySQL创建存储过程(CREATE PROCEDURE)
MySQL 存储过程是一些 SQL 语句的集合,比如有时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程. 编写存 ...
- mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务
一.SQL 约束 1.约束的作用: 对表中的数据进行进一步的限制,从而保证数据的正确性.有效性.完整性.违反约束的不正确数据将无法插入到表中 2.常见的约束: 3.主键约束: -- 特点: 不可重复. ...
- mysql mongodb 事务_MySQL PK MongoDB:多文档事务支持,谁更友好?
原标题:MySQL PK MongoDB:多文档事务支持,谁更友好? 作者介绍 贺春旸,凡普金科DBA团队负责人,<MySQL管理之道:性能调优.高可用与监控>第一.二版作者,曾任职于中国 ...
- MySQL转账储存过程_mysql中用存储过程实现转账过程
/* 一. 1.编写存储过程实现转账过程 2.提示: (1)涉及t_user.t_account表,新建t_transfer_log表 (2)转账金额小于100,不收手续费,在100-1000范围收取 ...
- mysql 存储过程游标删除_mysql数据库存储过程游标循环,提前退出
需求:向trade这个数据库中的每一个表增加多个字段 遇到问题:存储过程,游标,循环,动态sql执行 注意: mysql 存储过程在我所使用的5.5版本中不能使用 show 的命令,利用 inform ...
- mysql 存储过程改用户_Mysql修改存储过程相关权限问题
在使用mysql数据库经常都会遇到这么一个问题,其它用户定义的存储过程,现在使用另一个用户却无法修改或者删除等:正常情况下存储过程的定义者对它有修改.删除的权限:但是其它的用户就要相于的授权,不然无法 ...
最新文章
- SpringMVC之使用Validator接口进行验证
- 谁在“唱衰”OpenStack?
- QEMU虚拟机关键源代码学习
- Boost:query的使用测试程序
- 使用C#删除一个字符串数组中的空字符串
- 杀死应用进程 android,如何杀死Android应用程序启动的logcat进程?
- vue 开发过程中遇到的问题
- 基本不等式解决乘积最大问题(洛谷P1887题题解,Java语言描述)
- 飞鸽传书有关举证不够严谨
- 使用 XML Schema 定义元素的基本知识--1
- QT软件ICON图标在线制作
- html中添加cnzz,vue中移动端网页 H5网站 添加到 友盟 cnzz的方法
- 页面设计如何进行颜色搭配
- [转] vagrant学习笔记 - provision
- 200行Go代码实现自己的区块链——区块生成与网络通信
- 办理《北京市工作居住证》各项变更须提交材料
- 4和2大于号小于号箭头那边_认识﹥﹤=(大于号、小于号和等号), 会用符号表示两个数的大小 导学案(青岛版一年级上册)...
- CyclicBarrier实现赛马游戏
- PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡
- 如何利用编程思维,提高英语成绩?
热门文章
- os.getcwd()
- Leetcode题目practice
- bzoj 1207: [HNOI2004]打鼹鼠【dp】
- Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
- Ubuntu 12.04 下安装 Eclipse
- 【翻译】微软会投资和支持Skype在非微软平台上的业务
- 2020-08-18 每日一句
- 190720每日一句
- Atitit 变量类型系统 目录 1. 通用类型系统 (Common Type System)	1 1.1. CTS 的类型[编辑]	1 2. CLR支持两种基本类型:值类型和引用类型。因此,还是把
- Atitit 项目管理之沟通管理概论问题管理 艾提拉著 跨语言沟通 群组沟通 书面沟通 目录 1. 沟通方式	2 1.1. 书面沟通 vs 当面沟通	2 1.2. 群组沟通(公开沟通) vs