mysql定時器event詳解
一. 事件簡介
事件(event)是MySQL在相應的時刻呼叫的過程式資料庫物件。一個事件可呼叫一次,也可週期性的啟動,它由一個特定的執行緒來管理的,也就是所謂的“事件排程器”。
事件和觸發器類似,都是在某些事情發生的時候啟動。當資料庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據排程事件來啟動的。由於他們彼此相似,所以事件也稱為臨時性觸發器。
事件取代了原先只能由作業系統的計劃任務來執行的工作,而且MySQL的事件排程器可以精確到每秒鐘執行一個任務,而作業系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執行一次。
二. 事件的優缺點
2.1 優點
一些對資料定時性操作不再依賴外部程式,而直接使用資料庫本身提供的功能。
可以實現每秒鐘執行一個任務,這在一些對實時性要求較高的環境下就非常實用了。
2.2 缺點
定時觸發,不可以呼叫。
三. 建立事件
檢視是否開啟evevt與開啟evevt。
MySQL evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是OFF或者0,表示是關閉的。
mysql> show VARIABLES LIKE 'event_schedu%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
開啟event功能:
mysql> SET GLOBAL event_scheduler = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show VARIABLES LIKE 'event_schedu%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.00 sec)
建立event舉例:
mysql> use test-_T
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
先建立儲存過程:
mysql> delimiter //
mysql> create procedure del_proc()
-> begin
-> INSERT INTO req(entname) SELECT t.`NAME` FROM (SELECT NAME, min(ZCSJ) AS mydate FROM test-_T.t_user_sign GROUP BY NAME) t WHERE t.mydate > NOW() - 36 * 60 * 1000 and t.`NAME` not in(SELECT entname from req);
-> UPDATE req SET `STATUS` = '0' where `STATUS` is null;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
執行儲存過程的內容:
mysql> call del_proc();
-> //
Query OK, 2 rows affected, 1 warning (0.29 sec)
建立事件deldata_event(其作用:每隔一分鐘自動呼叫del_proc()儲存過程的內容)
mysql> create event deldata_event
-> on schedule every 1 minute
-> on completion preserve disable
-> do call del_proc();
-> //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
開啟事件deldata_event
mysql> alter event deldata_event on completion preserve enable;
-> //
Query OK, 0 rows affected (0.00 sec)
關閉事件deldata_event
mysql>alter event deldata_event on completion preserve disable;
檢視自己建立的event:
mysql> select * from mysql.event;
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
| db | name | body | definer | execute_at | interval_value | interval_field | created | modified | last_executed | starts | ends | status | on_completion | sql_mode | comment | originator | time_zone | character_set_client | collation_connection | db_collation | body_utf8 |
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
| Test-_T | deldata_event | call del_proc() | mdba@% | NULL | 1 | MINUTE | 2017-05-09 10:21:57 | 2017-05-09 10:22:11 | 2017-05-09 02:24:57 | 2017-05-09 02:21:57 | NULL | ENABLED | PRESERVE | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | | 15 | SYSTEM | utf8 | utf8_general_ci | utf8_general_ci | call del_proc() |
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
1 row in set (0.00 sec)
MySQL中檢視Event的執行情況
透過執行如下的語句:
SELECT * FROM information_schema.EVENTS;
例如:
mysql> SELECT * FROM information_schema.events \G
*************************** 1. row ***************************
EVENT_CATALOG: def
EVENT_SCHEMA: ixinnuo_sjcj
EVENT_NAME: deldata_event
DEFINER: mdba@%
TIME_ZONE: SYSTEM
EVENT_BODY: SQL
EVENT_DEFINITION: call del_proc()
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 1
INTERVAL_FIELD: MINUTE
SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
STARTS: 2017-05-09 10:21:57
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: PRESERVE
CREATED: 2017-05-09 10:21:57
LAST_ALTERED: 2017-05-09 10:22:11
LAST_EXECUTED: 2017-05-11 08:43:57
EVENT_COMMENT:
ORIGINATOR: 15
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)
可以看到相應的庫中的作業資訊,其中LAST_EXECUTED欄位會反映出相應的作業最近一次的執行時間
事件(event)是MySQL在相應的時刻呼叫的過程式資料庫物件。一個事件可呼叫一次,也可週期性的啟動,它由一個特定的執行緒來管理的,也就是所謂的“事件排程器”。
事件和觸發器類似,都是在某些事情發生的時候啟動。當資料庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據排程事件來啟動的。由於他們彼此相似,所以事件也稱為臨時性觸發器。
事件取代了原先只能由作業系統的計劃任務來執行的工作,而且MySQL的事件排程器可以精確到每秒鐘執行一個任務,而作業系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執行一次。
二. 事件的優缺點
2.1 優點
一些對資料定時性操作不再依賴外部程式,而直接使用資料庫本身提供的功能。
可以實現每秒鐘執行一個任務,這在一些對實時性要求較高的環境下就非常實用了。
2.2 缺點
定時觸發,不可以呼叫。
三. 建立事件
檢視是否開啟evevt與開啟evevt。
MySQL evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是OFF或者0,表示是關閉的。
mysql> show VARIABLES LIKE 'event_schedu%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
開啟event功能:
mysql> SET GLOBAL event_scheduler = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show VARIABLES LIKE 'event_schedu%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.00 sec)
建立event舉例:
mysql> use test-_T
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
先建立儲存過程:
mysql> delimiter //
mysql> create procedure del_proc()
-> begin
-> INSERT INTO req(entname) SELECT t.`NAME` FROM (SELECT NAME, min(ZCSJ) AS mydate FROM test-_T.t_user_sign GROUP BY NAME) t WHERE t.mydate > NOW() - 36 * 60 * 1000 and t.`NAME` not in(SELECT entname from req);
-> UPDATE req SET `STATUS` = '0' where `STATUS` is null;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
執行儲存過程的內容:
mysql> call del_proc();
-> //
Query OK, 2 rows affected, 1 warning (0.29 sec)
建立事件deldata_event(其作用:每隔一分鐘自動呼叫del_proc()儲存過程的內容)
mysql> create event deldata_event
-> on schedule every 1 minute
-> on completion preserve disable
-> do call del_proc();
-> //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
開啟事件deldata_event
mysql> alter event deldata_event on completion preserve enable;
-> //
Query OK, 0 rows affected (0.00 sec)
關閉事件deldata_event
mysql>alter event deldata_event on completion preserve disable;
檢視自己建立的event:
mysql> select * from mysql.event;
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
| db | name | body | definer | execute_at | interval_value | interval_field | created | modified | last_executed | starts | ends | status | on_completion | sql_mode | comment | originator | time_zone | character_set_client | collation_connection | db_collation | body_utf8 |
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
| Test-_T | deldata_event | call del_proc() | mdba@% | NULL | 1 | MINUTE | 2017-05-09 10:21:57 | 2017-05-09 10:22:11 | 2017-05-09 02:24:57 | 2017-05-09 02:21:57 | NULL | ENABLED | PRESERVE | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | | 15 | SYSTEM | utf8 | utf8_general_ci | utf8_general_ci | call del_proc() |
+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+
1 row in set (0.00 sec)
MySQL中檢視Event的執行情況
透過執行如下的語句:
SELECT * FROM information_schema.EVENTS;
例如:
mysql> SELECT * FROM information_schema.events \G
*************************** 1. row ***************************
EVENT_CATALOG: def
EVENT_SCHEMA: ixinnuo_sjcj
EVENT_NAME: deldata_event
DEFINER: mdba@%
TIME_ZONE: SYSTEM
EVENT_BODY: SQL
EVENT_DEFINITION: call del_proc()
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 1
INTERVAL_FIELD: MINUTE
SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
STARTS: 2017-05-09 10:21:57
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: PRESERVE
CREATED: 2017-05-09 10:21:57
LAST_ALTERED: 2017-05-09 10:22:11
LAST_EXECUTED: 2017-05-11 08:43:57
EVENT_COMMENT:
ORIGINATOR: 15
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)
可以看到相應的庫中的作業資訊,其中LAST_EXECUTED欄位會反映出相應的作業最近一次的執行時間
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2138719/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL定時器EVENT學習筆記MySql定時器筆記
- 詳解 MySQL 用事件排程器 Event Scheduler 建立定時任務MySql事件
- 詳解MySQL用事件排程器Event Scheduler建立定時任務MySql事件
- Node 定時器詳解定時器
- Mysql 關於event的詳解MySql
- Mysql event實現定時建表小記MySql
- mysql 定時指令碼(event),類似oracle的jobMySql指令碼Oracle
- JMeter學習筆記--詳解JMeter定時器JMeter筆記定時器
- 嵌入式筆記5.1 定時器詳解筆記定時器
- Event-Loop 詳解OOP
- javascript定時器(setTimeout和setInterval)的使用詳解JavaScript定時器
- Node.js使用計時器定時執行函式詳解Node.js函式
- Oracle 定時任務詳解Oracle
- 定時任務crontab 詳解
- JS忍者祕籍中的定時器機制詳解JS定時器
- 【MySQL】事件排程器 (Event Scheduler)MySql事件
- Crontab 定時任務命令詳解
- javascript中的Event Loop詳解JavaScriptOOP
- MySQL中的事件排程器EVENTMySql事件
- Jmeter(十四) - 從入門到精通 - JMeter定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程)JMeter定時器
- HAL庫與Cubemx系列|Systick-系統滴答定時器詳解定時器
- 定時任務@Scheduled引數詳解
- Java定時任務排程詳解Java
- V$SYSTEM_EVENT等使用詳解
- Event Loop、計時器、nextTickOOP
- 深入mysql慢查詢設定的詳解MySql
- MySQL欄位預設值設定詳解MySql
- 瀏覽器event loop和node的event loop講解瀏覽器OOP
- MySQL 伺服器啟用 event_schedulerMySql伺服器
- 定時任務報警通知解決方案詳解
- Quartz定時任務框架(二) Quartz詳解quartz框架
- Linux/UNIX 定時任務 cron 詳解Linux
- Oracle定時任務(DBMS_Job)詳解Oracle
- Linux Crontab 定時任務 命令詳解Linux
- Javascript 執行機制詳解,Event LoopJavaScriptOOP
- JavaScript 執行機制--Event Loop詳解JavaScriptOOP
- Oracle 10046 event詳解-轉載Oracle