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