av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL定時(shí)器常用案例

瀏覽:10日期:2023-07-20 19:52:12
目錄MySQL-定時(shí)器介紹開啟定時(shí)器定時(shí)器常用案例周期性周期一次性MySQL-定時(shí)器介紹

在開發(fā)過程中經(jīng)常會(huì)遇到這樣一個(gè)問題:每天或者每月必須定時(shí)去執(zhí)行一條sql語句或更新或刪除或執(zhí)行特定的sql語句。而遇到這樣的問題我想很多人會(huì)說,我直接在程序代碼里寫一個(gè)定時(shí)器不就行了,對(duì)你說的沒問題,但是有些時(shí)候只是數(shù)據(jù)層面的問題,那么我們?cè)诔绦蚶飳懸粋€(gè)定時(shí)器就有點(diǎn)浪費(fèi)了,

比如:

定時(shí)清理臟數(shù)據(jù)在每月的月底統(tǒng)計(jì)這個(gè)月的業(yè)務(wù),將統(tǒng)計(jì)后的值放入統(tǒng)計(jì)表中分段定時(shí)導(dǎo)出批量數(shù)據(jù),進(jìn)行數(shù)據(jù)遷移定時(shí)整理其他系統(tǒng)推送來的數(shù)據(jù),然后將整理后的數(shù)據(jù)放入本系統(tǒng)業(yè)務(wù)表中…自行研究

可以看出來,mysql定時(shí)器作用其實(shí)挺大的,只是很多人都把它忽略了而已,但是缺陷也很明顯就是只能處理mysql內(nèi)已有的數(shù)據(jù),這個(gè)就看你自己了具體怎么使用了.

注意: mysql定時(shí)器是從mysql5.1開始的,如果你的mysql版本低于5.1,那就不能使用mysql定時(shí)器

開啟定時(shí)器

在使用定時(shí)器前必須檢查一下,mysql的定時(shí)器是否開啟的, 默認(rèn)是關(guān)閉的.

查詢定時(shí)器是否開啟OFF 關(guān)閉 , ON開啟

show VARIABLES like 'event_scheduler'

開啟mysql定時(shí)器

SET GLOBAL event_scheduler = 1;

然后我們?cè)诓樵兿戮褪荗N了,到這里我們mysql定時(shí)器開啟成功了

注意: 如果mysql服務(wù)器重啟這個(gè)還是會(huì)關(guān)閉的,

永久解決辦法:找到mysql根目錄下my.ini文件,打開并在[mysqld]標(biāo)記下方添加一句event_scheduler = ON即可。注意: 不要添加到[mysql]標(biāo)記下,而是[mysqld]標(biāo)記下,不然會(huì)配置無效。

重啟mysql 之后就會(huì)永久生效

使用sql語句創(chuàng)建定時(shí)器

為啥不使用Navicat創(chuàng)建定時(shí)器呢?, 反正我自我感覺的話,SQL比較踏實(shí),使用Navicat創(chuàng)建定時(shí)器總是出現(xiàn)各種問題,我也不知道是不是軟件的問題,還是我自己的問題,反正用sql從來就沒有出現(xiàn)問題過.如果是簡單的定時(shí)器創(chuàng)建的話那么使用Navicat 創(chuàng)建也行,沒要求的…

先介紹下常用關(guān)鍵字的意思先別管怎么用的,后面參照案例代碼就懂了:

常用的語法關(guān)鍵字:

NOT PRESERVE 任務(wù)完成后清除定時(shí)器, (默認(rèn))PRESERVE 任務(wù)完成后不清除定時(shí)器EVERY 周期執(zhí)行STARTS ENDS 在某個(gè)時(shí)間段執(zhí)行AT 某個(gè)時(shí)間點(diǎn)執(zhí)行ENDS 結(jié)束定時(shí)器時(shí)間INTERVAL 間隔(時(shí)間)

常用的單位關(guān)鍵字:HOUR : 小時(shí)SECOND 秒MINUTE : 分鐘DAY : 天MONTH: 月

定時(shí)器語法結(jié)構(gòu):

DROP EVENT IF EXISTS 定時(shí)器名稱 ;CREATE EVENT user_event ON SCHEDULE xx -- 定時(shí)器從什么開始執(zhí)行的 (必須)ENDS CURRENT_TIMESTAMP xx -- 定時(shí)器開始后在什么時(shí)候結(jié)束 (非必選) ON COMPLETION xx -- 定時(shí)器清除策略 (默認(rèn)就行)DO sql語句 -- 定時(shí)器執(zhí)行的內(nèi)容,只允許一條sql語句以分號(hào)結(jié)束 (必須)

大致就是這樣,別糾結(jié),后面會(huì)舉幾個(gè)例子你參照參照就行了.

這里有一個(gè)地方需要注意:DO 后面能執(zhí)行的sql語句,只要mysql中有的都能執(zhí)行,但是每一個(gè)定時(shí)器只能執(zhí)行一個(gè)sql,如果多條sql的話,建議使用存儲(chǔ)過程,然后在使用定時(shí)器執(zhí)行存儲(chǔ)過程就行了

定時(shí)器常用案例周期性

定時(shí)器,一直執(zhí)行

從現(xiàn)在開始每隔x天執(zhí)行一次

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_eventON SCHEDULE EVERY 9 DAY STARTS NOW()DO call user_procedure();

每天凌晨1點(diǎn)執(zhí)行

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_eventon schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour) DO call user_procedure();

每個(gè)月的一號(hào)凌晨1 點(diǎn)執(zhí)行

DROP EVENT IF EXISTS 定時(shí)器名稱 ;CREATE EVENT user_eventON 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();

每個(gè)季度一號(hào)的凌晨1點(diǎn)執(zhí)行

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_eventON 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號(hào)凌晨1點(diǎn)執(zhí)行

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_eventON 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(); 周期一次性

定時(shí)器執(zhí)行很多次后在滿足某個(gè)條件,定時(shí)器結(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 DAYDO call user_procedure();

從現(xiàn)在開始5天后開始執(zhí)行,一個(gè)月后停止執(zhí)行

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_eventON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTHDO call user_procedure();

一次性

滿足指定條件時(shí)只會(huì)執(zhí)行一次定時(shí)器,然后定時(shí)器被清除

在未來指定時(shí)間點(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 PRESERVEDO call user_procedure();

在2021-09-24 18:26:00時(shí)候執(zhí)行user_procedure()存儲(chǔ)過程一次之后,該定時(shí)器被系統(tǒng)清除

從現(xiàn)在開始1小時(shí)后執(zhí)行一次

DROP EVENT IF EXISTS user_event ;CREATE EVENT user_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR ON COMPLETION NOT PRESERVEDO call user_procedure();

開啟和關(guān)閉指定定時(shí)器

alter event user_event on completion preserve enable; -- 開啟定時(shí)任務(wù)alter event user_event on completion preserve disable; -- 關(guān)閉定時(shí)任務(wù)

查看當(dāng)前用戶的定時(shí)任務(wù)

注意: 建議在創(chuàng)建定時(shí)器的時(shí)候使用,root用戶,這樣到時(shí)候統(tǒng)一管理也比較方便

能查看到定時(shí)器調(diào)用的sql

select * from information_schema.`EVENTS`;

能查看到定時(shí)器的狀態(tài)ENABLED(定時(shí)器使開啟狀態(tài))DISABLED (定時(shí)器使關(guān)閉狀態(tài))

select * from mysql.event;

到此這篇關(guān)于MySQL-定時(shí)器的文章就介紹到這了,更多相關(guān)mysql定時(shí)器內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
主站蜘蛛池模板: 日韩欧美在线精品 | 亚洲精品久久久蜜桃网站 | 午夜羞羞| 日日操夜夜操天天操 | 成人高清在线视频 | 日韩一区精品 | 在线观看免费黄色片 | 91精品国产色综合久久 | 日韩中文一区 | 国产精品一区二区不卡 | 国产视频一二三区 | 国产一级淫片a直接免费看 免费a网站 | 91社区在线观看播放 | 欧美激情欧美激情在线五月 | 国产乱码精品一区二区三区五月婷 | 网站黄色在线免费观看 | 天天艹日日干 | 人人cao | 国产精品福利久久久 | 亚洲电影一区 | 欧美日一区 | 伊人导航 | 成人国产精品久久 | 色播久久 | 夜夜草视频 | 黄色毛片免费视频 | 国产区久久| 欧美亚洲国语精品一区二区 | 欧美九九九 | 中文字幕精品一区二区三区精品 | 国产四区 | 成人在线视频网 | 欧美理论在线观看 | av永久| 美女艹b| www.久| 欧美日一区二区 | 国产美女在线免费观看 | 视频一区二区在线观看 | 欧美日韩亚洲视频 | 在线视频日韩 |