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

MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解

 更新時(shí)間:2021年02月07日 10:16:32   作者:_陳哈哈  
這篇文章主要介紹了MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、事件(EVENT)是干什么的

  自MySQL5.1.6起,增加了一個(gè)非常有特色的功能 - 事件調(diào)度器(Event Scheduler),可以用做定時(shí)執(zhí)行某些特定任務(wù)(例如:刪除記錄、數(shù)據(jù)統(tǒng)計(jì)報(bào)告、數(shù)據(jù)備份等等),來取代原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來執(zhí)行的工作。
  值得一提的是MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個(gè)任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:Linux的cron)只能精確到每分鐘執(zhí)行一次。對(duì)于一些對(duì)數(shù)據(jù)實(shí)時(shí)性要求比較高的應(yīng)用(例如:股票、賠率、比分等)就非常適合。

  事件有時(shí)也可以稱為臨時(shí)觸發(fā)器(temporal triggers),因?yàn)槭录{(diào)度器是基于特定時(shí)間周期觸發(fā)來執(zhí)行某些任務(wù),而觸發(fā)器(Triggers)是基于某個(gè)表所產(chǎn)生的事件觸發(fā)的,區(qū)別也就在這里。

二、開啟“事件”功能

使用“事件”功能之前必須確保event_scheduler已開啟

1、查詢功能是否開啟:

-- 方法一
SELECT @@event_scheduler;
-- 方法二
SHOW VARIABLES LIKE 'event%';

顯示 “ON”說明功能已開啟;如下圖:

mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON    |
+-------------------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'event%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.00 sec)

2、開啟、關(guān)閉功能命令:

-- 開啟功能命令:
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
-- 關(guān)閉功能命令:
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;

當(dāng)然,通過命令開啟當(dāng)數(shù)據(jù)庫重啟后會(huì)自動(dòng)關(guān)閉;

持久化開啟方式:將event_scheduler=1寫到my.cnf配置文件中;如下圖:

在這里插入圖片描述

常用的事件操作命令:

  • 關(guān)閉指定事件: ALTER EVENT 事件名稱 ON COMPLETION PRESERVE DISABLE;
  • 開啟指定事件:ALTER EVENT 事件名稱 ON COMPLETION PRESERVE ENABLE;
  • 查看當(dāng)前事件:SHOW EVENTS ;

三、事件 - SQL語法創(chuàng)建

下面是EVENT事件創(chuàng)建語句,乍一看挺復(fù)雜的,讓我們拆開解讀一下

CREATE EVENT [IFNOT EXISTS] event_name
    ON SCHEDULE schedule(調(diào)度時(shí)間設(shè)置)
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO sql_statement;

SQL語法 說明
DEFINER 可選項(xiàng),給指定用戶使用權(quán)限
IF NOT EXISTS 可選項(xiàng),用于判斷要?jiǎng)?chuàng)建的事件是否存在
EVENT event_name 必選項(xiàng),指定事件名稱,event_name的最大長度為64個(gè)字符,如果為指定event_name,則默認(rèn)為當(dāng)前的MySQL用戶名(不區(qū)分大小寫)
ON SCHEDULE schedule 必選項(xiàng),這里的schedule用于定義執(zhí)行的時(shí)間和時(shí)間間隔,在下面我們?cè)敿?xì)講解
ON COMPLETION [NOT] PRESERVE 可選項(xiàng),配置事件執(zhí)行完一次后的處理方式;
當(dāng)為on completion preserve 的時(shí)候,當(dāng)event到期了,event會(huì)被disable,但是該event還是會(huì)存在
當(dāng)為on completion not preserve的時(shí)候,當(dāng)event到期的時(shí)候,該event會(huì)被自動(dòng)刪除掉.
ENABLE、DISABLE、DISABLE ON SLAVE 可選項(xiàng),用于指定事件的一種屬性。
ENABLE表示該事件是開啟的,也就是調(diào)度器檢查事件是否必選調(diào)用;
DISABLE表示該事件是關(guān)閉的,也就是事件的聲明存儲(chǔ)到目錄中,但是調(diào)度器不會(huì)檢查它是否應(yīng)該調(diào)用;
DISABLE ON SLAVE表示事件在從機(jī)中是關(guān)閉的。如果不指定這三個(gè)選擇中的任意一個(gè),則在一個(gè)事件創(chuàng)建之后,它立即變?yōu)榛顒?dòng)的。
COMMENT ‘comment' 可選項(xiàng),用于定義事件的注釋
DO event_body 必選項(xiàng),用于指定事件啟動(dòng)時(shí)所要執(zhí)行的代碼。可以是任何有效的SQL語句、存儲(chǔ)過程或者一個(gè)計(jì)劃執(zhí)行的事件。如果包含多條語句,可以使用BEGIN…END復(fù)合結(jié)構(gòu)

schedule 調(diào)度時(shí)間配置語法:調(diào)度時(shí)間配置包括ATEVERY兩種

AT timestamp [+ INTERVAL interval] ...
 | EVERY interval
 [STARTS timestamp [+ INTERVAL interval] ...]
 [ENDS timestamp [+ INTERVAL interval] ...]


-- INTERVAL中包含的時(shí)間單位如下:
{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
 WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
 DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

1、創(chuàng)建 - 單次定時(shí)執(zhí)行事件

AT TIMESTAMP 時(shí)間字符串 [+ INTERVAL INTERVAL]

  AT TIMESTAMP表示該事件只執(zhí)行一次,TIMESTAMP表示一個(gè)具體的時(shí)間點(diǎn),后面可以加上一個(gè)時(shí)間間隔,表示在這個(gè)時(shí)間間隔后事件發(fā)生。[+ INTERVAL INTERVAL]表示延遲觸發(fā)時(shí)間;

  需要注意的是,TIMESTAMP和具體字符串連用,如果不是具體字符串(如CURRENT_TIMESTAMP取當(dāng)前時(shí)間等),則不加TIMESTAMP;

示例 1:往demo_1119表中插入一行數(shù)據(jù),執(zhí)行時(shí)間:2020-11-20 00:00:00

CREATE EVENT demo_event2 
ON SCHEDULE AT TIMESTAMP '2020-11-20 00:00:00' 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())

結(jié)果查詢:

mysql> select * from demo_1119;
+-----+-----------+---------------------+
| id | name  | createTime   |
+-----+-----------+---------------------+
| 145 | 陳哈哈 | 2020-11-20 00:00:00 |
+-----+-----------+---------------------+
9 rows in set (0.00 sec)

示例 2:往demo_1119表中插入一行數(shù)據(jù),執(zhí)行時(shí)間:當(dāng)前時(shí)間往后5個(gè)小時(shí);

CREATE EVENT demo_event2 
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 HOUR
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())

2、創(chuàng)建 - 循環(huán)定時(shí)執(zhí)行事件

EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

EVERY表示循環(huán)執(zhí)行該事件,其中STARTS子句用于指定開始時(shí)間;ENDS子句用于指定結(jié)束時(shí)間。

示例 1:從當(dāng)前開始,每10秒往demo_1119表中插入一行數(shù)據(jù)

CREATE EVENT demo_event3 
ON SCHEDULE EVERY 10 SECOND 
ON COMPLETION PRESERVE 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())
mysql> select * from demo_1119;
+-----+-----------+---------------------+
| id | name  | createTime   |
+-----+-----------+---------------------+
| 145 | 陳哈哈 | 2020-11-19 11:10:39 |
| 146 | 陳哈哈 | 2020-11-19 11:10:49 |
| 147 | 陳哈哈 | 2020-11-20 11:10:59 |
| 148 | 陳哈哈 | 2020-11-20 11:11:09 |
| 149 | 陳哈哈 | 2020-11-20 11:11:19 |
| 150 | 陳哈哈 | 2020-11-20 11:11:29 |
| 151 | 陳哈哈 | 2020-11-20 11:11:39 |
+-----+-----------+---------------------+
9 rows in set (0.00 sec)

示例 2:從2020-11-20 12:00:00開始,每10分鐘往demo_1119表中插入一行數(shù)據(jù)

CREATE EVENT demo_event4 
ON SCHEDULE EVERY 10 MINUTE STARTS '2020-11-20 12:00:00' 
ON COMPLETION PRESERVE 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())
mysql> select * from demo_1119;
+-----+-----------+---------------------+
| id | name  | createTime   |
+-----+-----------+---------------------+
| 152 | 陳哈哈 | 2020-11-20 12:00:00 |
| 153 | 陳哈哈 | 2020-11-20 12:10:00 |
| 154 | 陳哈哈 | 2020-11-20 12:20:00 |
| 155 | 陳哈哈 | 2020-11-20 12:30:00 |
| 156 | 陳哈哈 | 2020-11-20 12:40:00 |
+-----+-----------+---------------------+
5 rows in set (0.00 sec)

示例 3:從當(dāng)前時(shí)間一小時(shí)后開始,每10分鐘往demo_1119表中插入一行數(shù)據(jù);已經(jīng)測(cè)試過可用,我就不再貼冗余查詢的數(shù)據(jù)咯~

CREATE EVENT demo_event5 
ON SCHEDULE EVERY 10 MINUTE STARTS CURRENT_TIMESTAMP+INTERVAL 1 HOUR 
ON COMPLETION PRESERVE 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())

示例4:從當(dāng)前時(shí)間一天后開始,每1小時(shí)往demo_1119表中插入一行數(shù)據(jù),三天后結(jié)束

CREATE EVENT demo_event5 
ON SCHEDULE EVERY 1 HOUR 
STARTS CURRENT_TIMESTAMP+INTERVAL 1 DAY 
ENDS CURRENT_TIMESTAMP+INTERVAL 3 DAY 
ON COMPLETION PRESERVE 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陳哈哈', NOW())

示例5:每天零點(diǎn)定時(shí)清一下demo_1119表數(shù)據(jù)

CREATE EVENT demo_event5 
ON SCHEDULE EVERY 1 DAY STARTS '2020-11-20 00:00:00' 
ON COMPLETION PRESERVE 
DO TRUNCATE table `demo_1119`

3、修改事件

修改事件語句跟創(chuàng)建語句如出一轍,語法如下:

ALTER EVENT event_name
    [ONSCHEDULE schedule]
    [old_NAME TO new_NAME]
    [ON COMPLETION [NOT] PRESERVE]
    [COMMENT 'comment']
    [ENABLE | DISABLE]
    [DO sql_statement]

關(guān)閉事件任務(wù): ALTER EVENT 事件名稱 ON COMPLETION PRESERVE DISABLE;

開啟事件任務(wù):ALTER EVENT 事件名稱 ON COMPLETION PRESERVE ENABLE;

4、刪除事件

DROP EVENT [IF EXISTS] event_name

四、事件 - 用Navicat創(chuàng)建(推薦)

  很多小伙伴喜歡在命令行敲SQL語句,會(huì)有種專業(yè)感,但也可能是被領(lǐng)導(dǎo)道德綁架了~~

  就像有些領(lǐng)導(dǎo)們覺得自己員工用Google就很cool😎😎,很帶勁;用百度查 csdn 就很 low。 但作為菜狗的我還是喜歡用我的Navicat小工具和度娘。好了廢話不多說,我們來看看Navicat是如何創(chuàng)建EVENT事件的,GO!

  如下圖,右鍵點(diǎn)擊創(chuàng)建新的事件

在這里插入圖片描述

  創(chuàng)建事件中的定義一欄是寫執(zhí)行SQL的,可以包括一條或多條SQL語句、存儲(chǔ)過程等,計(jì)劃一欄是定義事件觸發(fā)時(shí)間的。如下圖,我在執(zhí)行過程中定義了一條插入語句。

在這里插入圖片描述

當(dāng)然也可以同時(shí)寫多條SQL,中間帶分號(hào)。以BEGIN開頭,END結(jié)尾即可。

在這里插入圖片描述

打開計(jì)劃欄,是不是覺得很熟悉!在上個(gè)模塊我們都見過。為了使小伙伴們加深印象,我們?cè)诨仡櫼幌掳伞?/p>

在這里插入圖片描述

參數(shù)說明:

AT:表示該事件只執(zhí)行一次,可以設(shè)置一個(gè)具體的時(shí)間,也可以如圖中CURRENT_TIMESTAMP代表當(dāng)前時(shí)間,后面可以加上一個(gè)時(shí)間間隔interval,表示在這個(gè)時(shí)間多久以后后事件發(fā)生,表示延遲觸發(fā)時(shí)間;

  • EVERY:循環(huán)執(zhí)行該事件,其中STARTS子句用于指定開始時(shí)間;
  • ENDS子句用于指定結(jié)束時(shí)間。
  • interval表示從現(xiàn)在開始時(shí)間延遲多久以后的一個(gè)時(shí)間點(diǎn),其值由一個(gè)數(shù)值和單位構(gòu)成。例如,使用“4 WEEK”表示4周后;使用“‘1:10' HOUR_MINUTE”表示1小時(shí)10分鐘后。間隔的距離用DATE_ADD()函數(shù)來支配。

INTERVAL中包含的時(shí)間單位如下:

YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND |
YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND

好了,讓我們通過一些實(shí)例來加深印象: 示例 1:往demo_1119表中插入一行數(shù)據(jù),執(zhí)行時(shí)間:2020-11-20 00:00:00

在這里插入圖片描述示例

2:往demo_1119表中插入一行數(shù)據(jù),執(zhí)行時(shí)間:當(dāng)前時(shí)間往后5個(gè)小時(shí);

在這里插入圖片描述

示例 3:從當(dāng)前開始,每10秒往demo_1119表中插入一行數(shù)據(jù)

在這里插入圖片描述

示例 4:從2020-11-20 12:00:00開始,每10分鐘往demo_1119表中插入一行數(shù)據(jù)

在這里插入圖片描述

示例 5:從當(dāng)前時(shí)間一小時(shí)后開始,每10分鐘往demo_1119表中插入一行數(shù)據(jù);

在這里插入圖片描述

示例 6:從當(dāng)前時(shí)間一天后開始,每1小時(shí)往demo_1119表中插入一行數(shù)據(jù),三天后結(jié)束

在這里插入圖片描述

示例 7:每天零點(diǎn)定時(shí)清一下demo_1119表數(shù)據(jù)

在這里插入圖片描述

到此這篇關(guān)于MySQL定時(shí)任務(wù)(EVENT事件)如何配置詳解的文章就介紹到這了,更多相關(guān)MySQL定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • sql中select into和insert select的用法小結(jié)

    sql中select into和insert select的用法小結(jié)

    在工作中,我們經(jīng)常需要備份表,本文主要介紹了sql中select into和insert select的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • 深入理解Mysql的四種隔離級(jí)別

    深入理解Mysql的四種隔離級(jí)別

    開發(fā)工作中我們會(huì)使用到事務(wù),那你們知道事務(wù)又分哪幾種嗎?MYSQL標(biāo)準(zhǔn)定義了4類隔離級(jí)別,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的。低的隔離級(jí)一般支持更高的并發(fā)處理,并擁有更低的系統(tǒng)開銷。下面通過這篇文章我們來一起深入理解Mysql中的四種隔離級(jí)別。
    2016-11-11
  • MySQL壓力測(cè)試工具M(jìn)ysqlslap的使用

    MySQL壓力測(cè)試工具M(jìn)ysqlslap的使用

    這篇文章主要介紹了MySQL官方壓力測(cè)試工具 Mysqlslap的使用方法,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • MySQL 數(shù)據(jù)恢復(fù)的多種方法匯總

    MySQL 數(shù)據(jù)恢復(fù)的多種方法匯總

    日常工作中,總會(huì)有因手抖、寫錯(cuò)條件、寫錯(cuò)表名、錯(cuò)連生產(chǎn)庫造成的誤刪庫表和數(shù)據(jù)的事情發(fā)生。但是,如果每次刪庫都跑路的話,怕是再也不好找工作了吧!所以,刪庫跑路不是上上策
    2021-06-06
  • 手把手教你Navicat如何導(dǎo)出Excel格式的表結(jié)構(gòu)

    手把手教你Navicat如何導(dǎo)出Excel格式的表結(jié)構(gòu)

    我們?cè)陂_發(fā)中使用數(shù)據(jù)庫時(shí)往往需要做一些備份之類的,或者需要導(dǎo)出下表結(jié)構(gòu)導(dǎo)入到其他數(shù)據(jù)庫等,下面這篇文章主要給大家介紹了關(guān)于Navicat如何導(dǎo)出Excel格式的表結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • MYSQL導(dǎo)入導(dǎo)出sql文件簡析

    MYSQL導(dǎo)入導(dǎo)出sql文件簡析

    這篇文章主要介紹了MYSQL導(dǎo)入導(dǎo)出.sql文件的相關(guān)資料,內(nèi)容包括MYSQL的命令行模式的設(shè)置、命令行進(jìn)入MYSQL的方法、數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)庫文件、從外部文件導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫,感興趣的小伙伴們可以參考一下
    2016-04-04
  • MySql設(shè)置指定用戶數(shù)據(jù)庫查看查詢權(quán)限

    MySql設(shè)置指定用戶數(shù)據(jù)庫查看查詢權(quán)限

    這篇文章主要介紹了MySql設(shè)置指定用戶數(shù)據(jù)庫查看查詢權(quán)限,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Mysql存儲(chǔ)過程學(xué)習(xí)筆記--建立簡單的存儲(chǔ)過程

    Mysql存儲(chǔ)過程學(xué)習(xí)筆記--建立簡單的存儲(chǔ)過程

    我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)行它。
    2014-08-08
  • Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程

    Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程

    這篇文章主要為大家詳細(xì)介紹了Centos 6.4源碼安裝mysql-5.6.28.tar.gz教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL優(yōu)化之如何了解SQL的執(zhí)行頻率

    MySQL優(yōu)化之如何了解SQL的執(zhí)行頻率

    MySQL 客戶端連接成功后,通過 show [session|global]status 命令 可以提供服務(wù)器狀態(tài)信息,也可以在操作系統(tǒng)上使用 mysqladmin extended-status 命令獲得這些消息
    2014-05-05

最新評(píng)論