MySQLタイミングタスク、および処理オーダーステータス、タイミングキャンセル

SHOW VARIABLES LIKE '%event_sche%';		//查看event是否开启
SET GLOBAL event_scheduler = 1;		//将事件计划开启
SET GLOBAL event_scheduler = 0;		//将事件计划关闭 
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;	//关闭事件任务
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;	//开启事件任务
SHOW EVENTS ;	//查看事件任务

時限タスクの作成を作成します。

create event second_event_name
on schedule every 30 minute
on completion preserve disable
do sql语句

例:
テーブル名:test_timer;フィールドID自己増加、名前

SHOW VARIABLES LIKE '%event_sche%';
SET GLOBAL event_scheduler = 1;
create event t_test_timer_venet
on schedule every 1 second
on completion preserve disable
do insert into test_timer (name) values("测试时间1秒钟插入一次")
	
SHOW EVENTS ;
//查看status是否开启如果没有:
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
//查看表数据:已经有了。
//关闭:
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;

一般的な定期的なタイミングルール
定期的な実行-キーワード
すべての単位は、秒(秒)、分(分)、時間(時間)、日(日)、週(週)、四半期(四半期)、月(月)、年(年)です。 )

//举例:
on schedule every 1 second	//每秒执行一次
on schedule every 2 minute      //每两分钟执行一次
//列外:
on schedule at '2020-8-19 16:50:00'	//在2020-8-19 16:50:00时执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at current_timestamp()+interval 5 day //5天后执行
//其中current_timestamp()是当前时间戳函数

//在某个时间段执行–关键字STARTS ENDS
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天

たとえば、60分を超えて支払われない場合にキャンセルする注文を作成します

create event study_order_timer_event
on schedule every 1 minute
on completion preserve disable
do update study_order set order_status_id=0 where round(TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(date_added))) /60) >60 and order_status_id = 1;

次に、イベントタスクを開始します。
その中で:
round(TIME_TO_SEC(TIMEDIFF(NOW()、FROM_UNIXTIME(date_added)))/ 60)このメソッドは、現在の時刻と注文時刻の差を返します
round(num):rounded
TIME_TO_SEC(time ):関数には時間がかかります値は秒に変換されます
TIMEDIFF(day1、day2):関数は2つの日付間の日数を返します。day1形式:YYYY-MM-DD H:i:s
now():現在時間
FROM_UNIXTIME(date_added):データベースのため、保存注文時刻がUNIXタイムスタンプの場合、FROM_UNIXTIME()をYYYY-MM-DDに変換する必要がありますH:i:s

//查询
SELECT * from study_order where round(TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(date_added))) /60) >60 and order_status_id = 1;

おすすめ

転載: blog.csdn.net/hgb24660/article/details/108105280