zoukankan      html  css  js  c++  java
  • 秒杀商品的存储过程写法

    --秒杀执行存储过程
    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
  • 相关阅读:
    转:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
    Grid组件 列头居中
    XAML文档基础
    WPF框架之MVVM系列(一)
    WPF 树型控件(TreeView)
    WPF自定义控件开发
    ASP.NET MVC系列一:Global.asax用法分析
    WPF基础系列之 控件与布局
    WPF 自定义控件基类
    DbTool验证码
  • 原文地址:https://www.cnblogs.com/luffe/p/7988356.html
Copyright © 2011-2022 走看看