• 秒杀商品的存储过程写法


    --秒杀执行存储过程
    DELIMITER $$ --console ; 转化为 $$
    --定义存储过程
    --参数: 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(1005,12343456788,now(),@r_result);
    --获取结果
    select @r_result;

    -- 存储过程
    -- 1:存储过程优化:事务行级锁持有的时间
    -- 2:不要过度依赖存储过程(银行多用)
    -- 3:简单的逻辑可以应用存储过程
    -- 4:QPS 一个秒杀单6000/qps
  • 相关阅读:
    Codeforces Round #581 (Div. 2)
    Codeforces Round #605 (Div. 3)
    cin,cin.get(),cin.getline(),getline()
    容斥原理原理
    词法分析器
    Web学习开始。
    Convex hull凸包
    对max_flow做一个总结
    Vue中动画封装
    Vue中的动画特效
  • 原文地址:https://www.cnblogs.com/luffe/p/7988356.html
Copyright © 2020-2023  润新知