秒殺專案 儲存過程定義

2021-09-11 01:13:14 字數 1496 閱讀 9313

從這裡開始

-- 秒殺執行的儲存過程

delimiter $$ -- console ; 轉換為 $$

-- 定義儲存過程

-- 引數 in 輸入引數 out 輸出引數

-- row_count() 返回上一條修改型別sql的影響行數

-- 0 未修改資料 >0 修改的行數 <0 錯誤 或未執行修改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,13234325432,now(),@r_result);

-- 獲取結果

select @r_result;

秒殺專案總結(優化網路延遲以及使用儲存過程)

儲存過程 1.儲存過程優化 事務行級鎖持有的時間 2.不要過度依賴儲存過程 3.簡單的邏輯可以應用儲存過程 4.qps 乙個秒殺單6000 qps 儲存過程是一組預先建立並用指定的名稱儲存在資料庫伺服器上的 sql 語句,將使用比較頻繁或者比較複雜的操作,預先用 sql 語句寫好並儲存起來,以後當需...

儲存過程定義

return status 是乙個可選的整型變數,儲存儲存過程的返回狀態。這個變數在用於 execute 語句前,必須在批處理 儲存過程或函式中宣告過。在用於喚醒呼叫標量值使用者定義函式時,return status 變數可以是任何標量資料型別。procedure name 是擬呼叫的儲存過程的完全...

mysql定義過程 定義MySql儲存過程

建立乙個不帶返回值的儲存過程 delimiter drop procedure if exists proc name create procedureproc name in num1 int,in num2 int begin set a 2000000001 set d 20000001 se...