如何用mysql自帶的定時器定時執(zhí)行sql(每天0點(diǎn)執(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點(diǎn)執(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;
補(bǔ)充:ON SCHEDULE后面可以 自由發(fā)揮
每天凌晨一點(diǎn)執(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)
特定的日期特定的時間點(diǎn)執(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點(diǎn)、每小時、每分鐘、某一時間點(diǎn))
補(bǔ)充:定時器常用案例
周期性
定時器,一直執(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點(diǎn)執(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 點(diǎn)執(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點(diǎn)執(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點(diǎn)執(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í)行一次定時器,然后定時器被清除
在未來指定時間點(diǎn)執(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點(diǎn)執(zhí)行與間隔分/時執(zhí)行)的文章就介紹到這了,更多相關(guān)mysql定時器定時執(zhí)行sql內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫操作DML?插入數(shù)據(jù),刪除數(shù)據(jù),更新數(shù)據(jù)
這篇文章主要介紹了MySQL數(shù)據(jù)庫操作DML插入數(shù)據(jù),刪除數(shù)據(jù),更新數(shù)據(jù),DML是指數(shù)據(jù)操作語言,英文全稱是Data?Manipulation?Language,用來對數(shù)據(jù)庫中表的數(shù)據(jù)記錄進(jìn)行更新2022-07-07Linux操作系統(tǒng)操作MySQL常用命令小結(jié)
本文給大家分享Linux操作系統(tǒng)操作MySQL常用命令小結(jié),需要的朋友參考下吧2017-07-07什么是分表和分區(qū) MySql數(shù)據(jù)庫分區(qū)和分表方法
這篇文章主要為大家詳細(xì)介紹了MySql數(shù)據(jù)庫分區(qū)和分表方法,告訴大家什么是分表和分區(qū),mysql分表和分區(qū)有什么聯(lián)系,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02解決MySQL server has gone away錯誤的方案
在本篇文章里小編給大家分享的是一篇關(guān)于MySQL server has gone away錯誤的解決辦法,有需要的朋友們可以參考下。2020-02-02MySQL通過binlog恢復(fù)數(shù)據(jù)
通過了解binlog日志的相關(guān)配置,簡單掌握通過binlog對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)恢復(fù)操作。有此需求的朋友可以參考下2021-05-05解決阿里云ECS服務(wù)器下安裝MySQL無法遠(yuǎn)程連接的問題
這篇文章介紹了解決阿里云ECS服務(wù)器安裝MySQL無法遠(yuǎn)程連接的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Mysql跨表更新 多表update sql語句總結(jié)
Mysql跨表更新一直是大家所關(guān)心的話題,本文介紹mysql多表 update在實(shí)踐中幾種不同的寫法,需要的朋友可以參考下2012-12-12