mysql会默认开启事务吗_mysql的存储过程会自动开启一个事务吗?

7cf5350a9bef9ba1f6671c5bdcc1081f.png

倚天杖

当你决定使用存储过程的时候,那么整个事务是在MYSQL端完成的。对于事务竞争优化的主要一点就是减少事务锁时间。你选择了使用存储过程就可以不用再代码中开启事务,深度优化即将事务SQL在MYSQL端执行(存储过程)以下是类似的秒杀事务落地的存储过程-- 秒杀执行存储过程

DELIMITER $$ -- ; 转换为 $$

-- 定义存储过程 in 输入参数   out 输出参数

-- ROW_COUNT 返回上一条修改类型sql(delete、insert、update)的影响函数

-- row_count 0 未修改数据 >0修改的函数 <0 SQL错误、未执行修改sqlCREATE 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 

      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 

                              and number > 0; 

                                     SELECT row_count() into insert_count;

                                             if (insert_count = 0) THEN

          ROLLBACK;

                    set r_result = 0;

        ElSEIF(insert_count 

          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;这属于并发优化的阶段了,不要过度依赖存储过程,其一般用于简单的逻辑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值