說一下邏輯,
每分鐘遍歷一下訂單表內的所有數據,當狀態爲'未支付'下,已經20分鐘後就超時,並且改爲‘已超時’,
待發貨下,已經3小時後就超時,並且改爲‘已超時’
先創建存儲過程
create procedure order_checked()
begin
update order set STATUS='已超時',updateDate=now() where STATUS in ('未支付','已發貨','待確認') and
if(STATUS='未支付',createDate<(select date_sub(now(), interval 20 MINUTE)), --20分鐘
if(STATUS='已發貨',updateDate<(select date_sub(now(), interval 3 hour)), --3小時
if(STATUS='待確認',updateDate<(select date_sub(now(), interval 2 hour)),1=2))); --2小時
end
創建定時器
ALTER EVENT cyEvent
ON SCHEDULE EVERY 60 SECOND STARTS now()
ON COMPLETION PRESERVE ENABLE
do call cy_order_checked();
後面打開定時器就可以了