最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

  事件有時也可以稱為臨時觸發(fā)器(temporal triggers),因為事件調度器是基于特定時間周期觸發(fā)來執(zhí)行某些任務,而觸發(fā)器(Triggers)是基于某個表所產生的事件觸發(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、開啟、關閉功能命令:

-- 開啟功能命令:
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
-- 關閉功能命令:
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;

當然,通過命令開啟當數據庫重啟后會自動關閉;

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

在這里插入圖片描述

常用的事件操作命令:

  • 關閉指定事件: ALTER EVENT 事件名稱 ON COMPLETION PRESERVE DISABLE;
  • 開啟指定事件:ALTER EVENT 事件名稱 ON COMPLETION PRESERVE ENABLE;
  • 查看當前事件:SHOW EVENTS ;

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

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

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

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

schedule 調度時間配置語法:調度時間配置包括ATEVERY兩種

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


-- INTERVAL中包含的時間單位如下:
{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)建 - 單次定時執(zhí)行事件

AT TIMESTAMP 時間字符串 [+ INTERVAL INTERVAL]

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

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

示例 1:往demo_1119表中插入一行數據,執(zhí)行時間: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())

結果查詢:

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表中插入一行數據,執(zhí)行時間:當前時間往后5個小時;

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)定時執(zhí)行事件

EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

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

示例 1:從當前開始,每10秒往demo_1119表中插入一行數據

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表中插入一行數據

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:從當前時間一小時后開始,每10分鐘往demo_1119表中插入一行數據;已經測試過可用,我就不再貼冗余查詢的數據咯~

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:從當前時間一天后開始,每1小時往demo_1119表中插入一行數據,三天后結束

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:每天零點定時清一下demo_1119表數據

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]

關閉事件任務: ALTER EVENT 事件名稱 ON COMPLETION PRESERVE DISABLE;

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

4、刪除事件

DROP EVENT [IF EXISTS] event_name

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

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

當然也可以同時寫多條SQL,中間帶分號。以BEGIN開頭,END結尾即可。

在這里插入圖片描述

打開計劃欄,是不是覺得很熟悉!在上個模塊我們都見過。為了使小伙伴們加深印象,我們在回顧一下吧。

在這里插入圖片描述

參數說明:

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

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

INTERVAL中包含的時間單位如下:

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

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

在這里插入圖片描述示例

2:往demo_1119表中插入一行數據,執(zhí)行時間:當前時間往后5個小時;

在這里插入圖片描述

示例 3:從當前開始,每10秒往demo_1119表中插入一行數據

在這里插入圖片描述

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

在這里插入圖片描述

示例 5:從當前時間一小時后開始,每10分鐘往demo_1119表中插入一行數據;

在這里插入圖片描述

示例 6:從當前時間一天后開始,每1小時往demo_1119表中插入一行數據,三天后結束

在這里插入圖片描述

示例 7:每天零點定時清一下demo_1119表數據

在這里插入圖片描述

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

相關文章

  • sql與mysql有哪些區(qū)別

    sql與mysql有哪些區(qū)別

    在本篇文章里小編給大家分享了關于sql與mysql的區(qū)別的內容,有興趣的朋友們可以學習參考下。
    2020-06-06
  • MySQL 綠色版安裝方法圖文教程

    MySQL 綠色版安裝方法圖文教程

    MySQL 綠色版安裝方法教程,需要的朋友可以參考下。
    2012-01-01
  • MySQL聯合索引功能與用法實例分析

    MySQL聯合索引功能與用法實例分析

    這篇文章主要介紹了MySQL聯合索引功能與用法,結合具體實例形式分析了聯合索引的概念、功能、具體使用方法與相關注意事項,需要的朋友可以參考下
    2017-09-09
  • MySQL之主鍵索引排序失效問題

    MySQL之主鍵索引排序失效問題

    這篇文章主要介紹了MySQL之主鍵索引排序失效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL?字符串轉換為數字的方法小結

    MySQL?字符串轉換為數字的方法小結

    這篇文章主要介紹了MySQL字符串轉換為數字的幾種方法,本文給大家列列舉了三種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 簡單了解添加mysql索引的3條原則

    簡單了解添加mysql索引的3條原則

    這篇文章主要介紹了簡單了解添加mysql索引的3條原則,如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要看所有數據,需要的朋友可以參考下
    2019-06-06
  • MySQL中SHOW TABLE STATUS的使用及說明

    MySQL中SHOW TABLE STATUS的使用及說明

    這篇文章主要介紹了MySQL中SHOW TABLE STATUS的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL忘記密碼恢復密碼的實現方法

    MySQL忘記密碼恢復密碼的實現方法

    流傳較廣的方法,mysql中文參考手冊上的,各位vps主機租用客戶和服務器托管用戶忘記mysql5.1管理員密碼時,可以使用這種方法破解下
    2008-07-07
  • 進入mysql命令行和退出mysql命令行詳解

    進入mysql命令行和退出mysql命令行詳解

    這篇文章主要介紹了進入mysql命令行和退出mysql命令行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入講解數據庫中Decimal類型的使用以及實現方法

    深入講解數據庫中Decimal類型的使用以及實現方法

    MySQL?DECIMAL數據類型用于在數據庫中存儲精確的數值,我們經常將DECIMAL數據類型用于保留準確精確度的列,例如會計系統中的貨幣數據,下面這篇文章主要給大家介紹了關于數據庫中Decimal類型的使用以及實現方法的相關資料,需要的朋友可以參考下
    2022-02-02

最新評論

格尔木市| 乌苏市| 祁连县| 册亨县| 民丰县| 西昌市| 巫溪县| 敦煌市| 苏尼特右旗| 缙云县| 周宁县| 临海市| 扶沟县| 莫力| 崇左市| 崇文区| 诸暨市| 九龙坡区| 万安县| 洛阳市| 栾川县| 图木舒克市| 米易县| 利辛县| 交口县| 兴城市| 平潭县| 和顺县| 鲁甸县| 寿阳县| 杭锦旗| 宜春市| 开原市| 东海县| 静宁县| 鄂托克旗| 宣威市| 塔城市| 卢湾区| 龙山县| 元阳县|