如何用mysql自帶的定時器定時執(zhí)行sql(每天0點執(zhí)行與間隔分/時執(zhí)行)
需求
每天往一個表里面插入兩條數(shù)據(jù),但日期不同
INSERT INTO test(`id`, `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`, `insert_time`) VALUES (100, 2253, 61, 546, 90, 51, 897, 1961, 1, '2022-08-24', '2022-08-25 14:00:00'); INSERT INTO test(id`, `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`, `insert_time`) VALUES (101, 0, 0, 0, 0, 0, 0, 0, 2, '2022-08-24', '2022-08-25 14:00:00');
如果沒有其他調(diào)度或者不想每天自己手動執(zhí)行,可以考慮使用MySQL自帶的定時器來做
首先
1.查看是否開啟定時策略
show variables like '%sche%';

如果你的是OFF
那就需要開啟:
set global event_scheduler=1;
2.創(chuàng)建存儲函數(shù),存儲定時執(zhí)行的事件
根據(jù)自己的需求,修改存儲函數(shù)
CREATE PROCEDURE insert_monitor() INSERT INTO test( `art_training_institutions`, `places_for_performances`, `script_entertainment`, `video_game_hall`, `stage`, `ktv`, `Internet_bar`, `status`, `statistics_time`) select 2253, 61, 546, 90, 51, 897, 1961, 1, CURRENT_DATE union all select 0, 0, 0, 0, 0, 0, 0, 2, CURRENT_DATE
3.創(chuàng)建定時任務(wù)
-- 每天0點執(zhí)行 create event if not EXISTS my_monitor on schedule every 1 DAY STARTS date(CURRENT_DATE+1) on completion preserve do call insert_monitor();
4.查看創(chuàng)建的定時任務(wù)
show events; 或者 select * from mysql.event;

刪除
drop event my_monitor
如果不想刪除,可以考慮將它關(guān)閉
5.開啟或關(guān)閉定時任務(wù)
-- 關(guān)閉 alter event my_monitor on COMPLETION PRESERVE DISABLE; -- 開啟 alter event my_monitor on COMPLETION PRESERVE ENABLE;

補充:ON SCHEDULE后面可以 自由發(fā)揮
每天凌晨一點執(zhí)行定時任務(wù)
on schedule every 1 DAY STARTS DATE_ADD(DATE(CURRENT_DATE+1), interval 1 hour) on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour)
特定的日期特定的時間點執(zhí)行定時任務(wù)
ON SCHEDULE at '2019-10-10 19:14:10'
每五分鐘執(zhí)行一次定時任務(wù)
ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE()
每小時執(zhí)行一次定時任務(wù)
ON SCHEDULE EVERY 1 HOUR STARTS CURDATE()
at 特定時間執(zhí)行,every 重復(fù)執(zhí)行
參考 MySQL - 定時任務(wù)(每天凌晨1點、每小時、每分鐘、某一時間點)
補充:定時器常用案例
周期性
定時器,一直執(zhí)行
從現(xiàn)在開始每隔x天執(zhí)行一次
DROP EVENT IF EXISTS user_event ; CREATE EVENT user_event ON SCHEDULE EVERY 9 DAY STARTS NOW() DO call user_procedure();
每天凌晨1點執(zhí)行
DROP EVENT IF EXISTS user_event ; CREATE EVENT user_event on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour) DO call user_procedure();
每個月的一號凌晨1 點執(zhí)行
DROP EVENT IF EXISTS 定時器名稱 ; CREATE EVENT user_event ON schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour) DO call user_procedure();
每個季度一號的凌晨1點執(zhí)行
DROP EVENT IF EXISTS user_event ; CREATE EVENT user_event ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour) DO call user_procedure();
每年1月1號凌晨1點執(zhí)行
DROP EVENT IF EXISTS user_event ; CREATE EVENT user_event ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour) DO call user_procedure();
周期一次性
定時器執(zhí)行很多次后在滿足某個條件,定時器結(jié)束
從現(xiàn)在開始每天執(zhí)行一次,5天后停止執(zhí)行
DROP EVENT IF EXISTS user_event ;
CREATE EVENT user_event
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO call user_procedure();
從現(xiàn)在開始5天后開始執(zhí)行,一個月后停止執(zhí)行
DROP EVENT IF EXISTS user_event ;
CREATE EVENT user_event
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO call user_procedure();
一次性
滿足指定條件時只會執(zhí)行一次定時器,然后定時器被清除
在未來指定時間點執(zhí)行一次
DROP EVENT IF EXISTS user_event ;
CREATE EVENT user_event
ON SCHEDULE AT TIMESTAMP '2021-09-24 18:26:00'
ON COMPLETION NOT PRESERVE
DO call user_procedure();
在2021-09-24 18:26:00時候執(zhí)行user_procedure()存儲過程一次之后,該定時器被系統(tǒng)清除從現(xiàn)在開始1小時后執(zhí)行一次
DROP EVENT IF EXISTS user_event ;
CREATE EVENT user_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
ON COMPLETION NOT PRESERVE
DO call user_procedure();
開啟和關(guān)閉指定定時器
alter event user_event on completion preserve enable; -- 開啟定時任務(wù) alter event user_event on completion preserve disable; -- 關(guān)閉定時任務(wù)
總結(jié)
到此這篇關(guān)于如何用mysql自帶的定時器定時執(zhí)行sql(每天0點執(zhí)行與間隔分/時執(zhí)行)的文章就介紹到這了,更多相關(guān)mysql定時器定時執(zhí)行sql內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql為字段添加和刪除唯一性索引(unique) 的方法
下面小編就為大家?guī)硪黄猰ysql為字段添加和刪除唯一性索引(unique) 的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
MySQL數(shù)據(jù)庫聚合查詢和聯(lián)合查詢詳解
聚合查詢就是在一個表里通過聚合函數(shù)進行查詢操作,通常是求和,求平均值等操作,這篇文章主要介紹了MySQL聚合查詢和聯(lián)合查詢的相關(guān)資料,需要的朋友可以參考下2024-03-03
MYSQL 5.6 從庫復(fù)制的部署和監(jiān)控的實現(xiàn)
這篇文章主要介紹了MYSQL 5.6 從庫復(fù)制的部署和監(jiān)控的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
MySQL與PHP的基礎(chǔ)與應(yīng)用專題之增刪改查
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇從數(shù)據(jù)庫的增刪改查開始2022-02-02

