自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文總結(jié)MySQL數(shù)據(jù)庫事件--定時任務(wù)實(shí)現(xiàn)方式

數(shù)據(jù)庫 MySQL
由于最近在做某些日志表的清理工作,會用到定時任務(wù),所以這里也簡單介紹一下mysql如何用事件來實(shí)現(xiàn)定時任務(wù)。

由于最近在做某些日志表的清理工作,會用到定時任務(wù),所以這里也簡單介紹一下mysql如何用事件來實(shí)現(xiàn)定時任務(wù)。

后面會介紹兩個日志表清理實(shí)現(xiàn)方案,一種是傳統(tǒng)的定時delete,另一種會稍微復(fù)雜點(diǎn),主要是針對比較大型的項(xiàng)目。

MySQL數(shù)據(jù)庫

一、事件概述

在MySQL 5.1中新增了一個特色功能事件調(diào)度器(Event Scheduler),簡稱事件。

事件(event)是MySQL在相應(yīng)的時刻調(diào)用的過程式數(shù)據(jù)庫對象。一個事件可調(diào)用一次,也可周期性的啟動,它由一個特定的線程來管理的,也就是所謂的“事件調(diào)度器”。

事件和觸發(fā)器類似,都是在某些事情發(fā)生的時候啟動。當(dāng)數(shù)據(jù)庫上啟動一條語句的時候,觸發(fā)器就啟動了,而事件是根據(jù)調(diào)度事件來啟動的。由于他們彼此相似,所以事件也稱為臨時性觸發(fā)器。事件取代了原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來執(zhí)行的工作,而且MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:Linux下的CRON或Windows下的任務(wù)計(jì)劃)只能精確到每分鐘執(zhí)行一次。

二、事件的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):一些對數(shù)據(jù)定時性操作不再依賴外部程序,而直接使用數(shù)據(jù)庫本身提供的功能??梢詫?shí)現(xiàn)每秒鐘執(zhí)行一個任務(wù),這在一些對實(shí)時性要求較高的環(huán)境下就非常實(shí)用了。

缺點(diǎn):定時觸發(fā),不可以調(diào)用。

三、事件調(diào)度器參數(shù)

事件由一個特定的線程來管理。啟用事件調(diào)度器后,擁有SUPER權(quán)限的賬戶執(zhí)行SHOW PROCESSLIST就可以看到這個線程了。

  1. --查看事件是否開啟。SHOW VARIABLES LIKE 'event_scheduler';SELECT @@event_scheduler;--全局開啟事件調(diào)度器SET GLOBAL event_scheduler = ON;--全局關(guān)閉事件調(diào)度器SET GLOBAL event_scheduler = OFF;--永久開啟事件調(diào)度器(在my.cnf配置文件中添加)#事件調(diào)度器啟動狀態(tài)event_scheduler = on 

四、創(chuàng)建事件

一條create event語句創(chuàng)建一個事件。每個事件由兩個主要部分組成,第一部分是事件調(diào)度(eventschedule,表示事件何時啟動以及按什么頻率啟動;

第二部分是事件動作(event action),這是事件啟動時執(zhí)行的代碼,事件的動作包含一條SQL語句,它可能是一個簡單地insert或者update語句,也可以使一個存儲過程或者

benin...end語句塊,這兩種情況允許我們執(zhí)行多條SQL。

一個事件可以是活動(打開)的或停止(關(guān)閉)的,活動意味著事件調(diào)度器檢查事件動作是否必須調(diào)用,停止意味著事件的聲明存儲在目錄中,但調(diào)度器不會檢查它是否應(yīng)該調(diào)用。在一個事件創(chuàng)建之后,它立即變?yōu)榛顒拥?,一個活動的事件可以執(zhí)行一次或者多次。

相關(guān)語法:

  1. CREATE  [DEFINER = { user | CURRENT_USER }]   EVENT   [IF NOT EXISTS]   event_name   ON SCHEDULE schedule   [ON COMPLETION [NOT] PRESERVE]   [ENABLE | DISABLE | DISABLE ON SLAVE]   [COMMENT 'comment']   DO event_body;    schedule:   AT timestamp [+ INTERVAL interval] ...  | EVERY interval   [STARTS timestamp [+ INTERVAL interval] ...]   [ENDS timestamp [+ INTERVAL interval] ...]    interval:   quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |        WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |        DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} 

說明:

一文總結(jié)mysql數(shù)據(jù)庫事件--定時任務(wù)實(shí)現(xiàn)方式

一文總結(jié)mysql數(shù)據(jù)庫事件--定時任務(wù)實(shí)現(xiàn)方式

五、事件(定時任務(wù))管理

1. 查詢事件

在MySQL中可以通過查詢information_schema.events表,查看已創(chuàng)建的事件。

  1. --查看當(dāng)前所在庫的事件show events;--查看所有事件SELECT * FROM information_schema.events;  

2. 修改事件

事件被創(chuàng)建之后,還可以使用ALTER EVENT語句修改其定義和相關(guān)屬性

  1. ALTER[DEFINER={user | CURRENT_USER}]EVENT [IF NOT EXISTS] event_nameON SCHEDULE schedule[ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE][COMMENT 'comment']DO event_body; 

3. 啟動與關(guān)閉事件

ALTER EVENT語句可以讓一個事件關(guān)閉或再次活動。

  1. --啟動事件。ALTER EVENT event_name ENABLE;--關(guān)閉事件。ALTER EVENT event_name DISABLE; 

4. 刪除事件

刪除已經(jīng)創(chuàng)建的事件可以使用DROP EVENT語句來實(shí)現(xiàn)。

  1. DROP EVENT IF EXISTS event_name; 

六、實(shí)例演示

1. 事件+sql

創(chuàng)建名稱為event_t1的事件,用于每隔5秒鐘向數(shù)據(jù)表t1(用戶信息表)中插入一條數(shù)據(jù)。

  1. -- 創(chuàng)建用戶信息表CREATE TABLE IF NOT EXISTS t1( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶編號', name VARCHAR(30) NOT NULL COMMENT '用戶姓名', create_time TIMESTAMP COMMENT '創(chuàng)建時間') COMMENT = '用戶信息表';-- 創(chuàng)建事件CREATE EVENT IF NOT EXISTS event_t1ON SCHEDULE EVERY 5 SECONDON COMPLETION PRESERVECOMMENT '新增用戶信息定時任務(wù)'DO INSERT INTO t1(name,create_time) VALUES('hwb',NOW()); 

一文總結(jié)mysql數(shù)據(jù)庫事件--定時任務(wù)實(shí)現(xiàn)方式

2. 事件+存儲過程

  1. --創(chuàng)建總表CREATE TABLE IF NOT EXISTS t_total( userNumber INT  COMMENT '用戶數(shù)', createtime TIMESTAMP COMMENT '創(chuàng)建時間') COMMENT = '總表';--創(chuàng)建名稱為t_total的存儲過程,用于統(tǒng)計(jì)前面表插入的數(shù)量CREATE PROCEDURE t_total()BEGIN DECLARE n_total INT default 0; SELECT COUNT(*) INTO n_total FROM t1; INSERT INTO t_total (userNumber,createtime) VALUES(n_total,NOW());END;--創(chuàng)建名稱為event_total的事件,用于在每天12點(diǎn)調(diào)用存儲過程。CREATE EVENT IF NOT EXISTS event_totalON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 12 HOUR)ON COMPLETION PRESERVE ENABLEDO CALL t_total(); 

一文總結(jié)mysql數(shù)據(jù)庫事件--定時任務(wù)實(shí)現(xiàn)方式

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2024-09-18 13:57:15

2024-12-27 08:24:55

2020-12-21 07:31:23

實(shí)現(xiàn)單機(jī)JDK

2019-12-14 15:27:31

MySQL數(shù)據(jù)庫訪問控制

2021-06-30 07:19:34

SpringBoot定時任務(wù)

2024-09-20 05:49:04

SpringBoot后端

2024-05-31 13:07:29

.NET Core定時任務(wù)編程

2024-03-12 11:39:30

Python開發(fā)

2024-10-15 16:41:35

2024-05-13 09:49:30

.NETQuartz庫Cron表達(dá)式

2022-07-28 09:02:41

文件存儲系統(tǒng)

2024-11-04 16:01:01

2021-08-11 10:10:26

Linux定時器數(shù)組

2023-07-17 10:45:03

向量數(shù)據(jù)庫NumPy

2019-09-11 09:37:17

數(shù)據(jù)庫MySQL系統(tǒng)

2020-12-22 10:02:53

ZabbixMySQL數(shù)據(jù)庫

2020-07-16 07:30:15

數(shù)據(jù)庫SQL技術(shù)

2010-06-02 17:31:10

MySQL定時任務(wù)

2023-12-19 08:09:06

Python定時任務(wù)Cron表達(dá)式

2021-08-05 07:28:25

Java實(shí)現(xiàn)方式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號