欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年07月03日 09:17:49   作者:胡安民  
這篇文章主要介紹了MySQL定時(shí)器的相關(guān)知識(shí),本文結(jié)合使用案例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

MySQL-定時(shí)器

介紹

在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)遇到這樣一個(gè)問(wèn)題:每天或者每月必須定時(shí)去執(zhí)行一條sql語(yǔ)句或更新或刪除或執(zhí)行特定的sql語(yǔ)句。而遇到這樣的問(wèn)題我想很多人會(huì)說(shuō),我直接在程序代碼里寫(xiě)一個(gè)定時(shí)器不就行了,對(duì)你說(shuō)的沒(méi)問(wèn)題,但是有些時(shí)候只是數(shù)據(jù)層面的問(wèn)題,那么我們?cè)诔绦蚶飳?xiě)一個(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)推送來(lái)的數(shù)據(jù),然后將整理后的數(shù)據(jù)放入本系統(tǒng)業(yè)務(wù)表中
  • …自行研究

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

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

開(kāi)啟定時(shí)器

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

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

show VARIABLES like 'event_scheduler'

開(kāi)啟mysql定時(shí)器

SET GLOBAL event_scheduler = 1;

然后我們?cè)诓樵?xún)下就是ON了,到這里我們mysql定時(shí)器開(kāi)啟成功了

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

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

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

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

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

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

常用的語(yǔ)法關(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í)器語(yǔ)法結(jié)構(gòu):

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

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

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

定時(shí)器常用案例

周期性

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

從現(xiàn)在開(kāi)始每隔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();  

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

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

每個(gè)季度一號(hào)的凌晨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號(hào)凌晨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();  

周期一次性

定時(shí)器執(zhí)行很多次后在滿(mǎn)足某個(gè)條件,定時(shí)器結(jié)束

從現(xiàn)在開(kāi)始每天執(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)在開(kāi)始5天后開(kāi)始執(zhí)行,一個(gè)月后停止執(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();

一次性

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

在未來(lái)指定時(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 PRESERVE
DO  call user_procedure();

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

從現(xiàn)在開(kāi)始1小時(shí)后執(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();

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

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

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

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

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

select * from information_schema.`EVENTS`;

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

select * from  mysql.event;

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

相關(guān)文章

  • mysql 如何動(dòng)態(tài)修改復(fù)制過(guò)濾器

    mysql 如何動(dòng)態(tài)修改復(fù)制過(guò)濾器

    這篇文章主要介紹了mysql 如何動(dòng)態(tài)修改復(fù)制過(guò)濾器,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • MySQL中的redo log和undo log日志詳解

    MySQL中的redo log和undo log日志詳解

    MySQL日志系統(tǒng)中最重要的日志為重做日志redo log和歸檔日志bin log,后者為MySQL Server層的日志,前者為InnoDB存儲(chǔ)引擎層的日志。今天通過(guò)本文給大家介紹MySQL中的redo log和undo log日志,感興趣的朋友一起看看吧
    2021-07-07
  • mysql優(yōu)化利器之explain使用介紹

    mysql優(yōu)化利器之explain使用介紹

    這篇文章主要介紹了mysql優(yōu)化利器之explain使用介紹,需要的朋友可以參考下
    2017-01-01
  • MySql采用GROUP_CONCAT合并多條數(shù)據(jù)顯示的方法

    MySql采用GROUP_CONCAT合并多條數(shù)據(jù)顯示的方法

    這篇文章主要介紹了MySql采用GROUP_CONCAT合并多條數(shù)據(jù)顯示的方法,是MySQL數(shù)據(jù)庫(kù)程序設(shè)計(jì)中常見(jiàn)的實(shí)用技巧,需要的朋友可以參考下
    2014-10-10
  • phpmyadmin中為站點(diǎn)設(shè)置mysql權(quán)限的圖文方法

    phpmyadmin中為站點(diǎn)設(shè)置mysql權(quán)限的圖文方法

    在一個(gè)服務(wù)器上一般來(lái)講都不止一個(gè)站點(diǎn),更不止一個(gè)MySQL(和PHP搭配之最佳組合)數(shù)據(jù)庫(kù)。
    2011-03-03
  • MySQL 分組查詢(xún)和聚合函數(shù)

    MySQL 分組查詢(xún)和聚合函數(shù)

    這篇文章主要介紹了MySQL 分組查詢(xún)和聚合函數(shù)的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • mysql中的find_in_set字符串查找函數(shù)解析

    mysql中的find_in_set字符串查找函數(shù)解析

    這篇文章主要介紹了mysql中的find_in_set字符串查找函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MYSQL大小寫(xiě)不敏感導(dǎo)致用戶(hù)登錄異常問(wèn)題

    MYSQL大小寫(xiě)不敏感導(dǎo)致用戶(hù)登錄異常問(wèn)題

    這篇文章主要介紹了MYSQL大小寫(xiě)不敏感導(dǎo)致用戶(hù)登錄異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MySQL和Redis之間的存儲(chǔ)區(qū)別

    MySQL和Redis之間的存儲(chǔ)區(qū)別

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù),而Redis是一種鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),雖然它們都是用來(lái)存儲(chǔ)和管理數(shù)據(jù)的,但是它們?cè)诤芏喾矫娑加胁煌疚木徒o大家詳細(xì)介紹一下MySQL和Redis之間的存儲(chǔ)區(qū)別,感興趣的同學(xué)可以參考一下
    2023-06-06
  • MySQL內(nèi)存使用率高且不釋放問(wèn)題排查與總結(jié)

    MySQL內(nèi)存使用率高且不釋放問(wèn)題排查與總結(jié)

    這篇文章主要給大家介紹了MySQL內(nèi)存使用率高且不釋放問(wèn)題排查與總結(jié),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2024-09-09

最新評(píng)論