说一下逻辑,
每分钟遍历一下订单表内的所有数据,当状态为'未支付'下,已经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();
后面打开定时器就可以了