本文實例講述了mysql的計劃任務與事件調度。分享給大家供大家參考,具體如下:
mysql事件是基于預定義的時間表運行的任務,因此有時它被稱為預定事件。mysql事件也被稱為“時間觸發”,因為它是由時間觸發的,而不是像觸發器一樣更新表來觸發的。mysql事件類似于UNIX中的cron作業或Windows中的任務調度程序。我們可以在優化數據庫表,清理日志,歸檔數據或在非高峰時間生成復雜的報告的時候使用mysql事件。
mysql使用一個名為事件調度線程的特殊線程來執行所有調度的事件。我們可以通過執行以下命令來查看事件調度程序線程的狀態:
SHOW PROCESSLIST;
執行上面查詢語句,得到以下結果:
mysql> SHOW PROCESSLIST;+----+------+-----------------+----------+---------+------+----------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+------+-----------------+----------+---------+------+----------+------------------+| 2 | root | localhost:50405 | NULL | Sleep | 1966 | | NULL || 3 | root | localhost:50406 | yiibaidb | Sleep | 1964 | | NULL || 4 | root | localhost:50407 | yiibaidb | Query | 0 | starting | SHOW PROCESSLIST |+----+------+-----------------+----------+---------+------+----------+------------------+3 rows in set
默認情況下,事件調度程序線程未啟用。 要啟用和啟動事件調度程序線程,需要執行以下命令:
SET GLOBAL event_scheduler = ON;
現在看到事件調度器線程的狀態,再次執行SHOW PROCESSLIST命令,結果如下所示:
mysql> SHOW PROCESSLIST;+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+| 2 | root | localhost:50405 | NULL | Sleep | 1986 | | NULL || 3 | root | localhost:50406 | luyaran | Sleep | 1984 | | NULL || 4 | root | localhost:50407 | luyaran | Query | 0 | starting | SHOW PROCESSLIST || 5 | event_scheduler | localhost | NULL | Daemon | 6 | Waiting on empty queue | NULL |+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+4 rows in set
要禁用并停止事件調度程序線程,可通過執行SET GLOBAL命令將event_scheduler其值設置為OFF :
SET GLOBAL event_scheduler = OFF;
我們知道,事件是一個包含SQL語句的命名對象,創建事件與創建其他數據庫對象(如存儲過程或觸發器)類似,然而,存儲過程僅在直接調用時執行; 觸發器則與一個表相關聯的事件(例如插入,更新或刪除)事件發生時,可以在一次或更多的規則間隔執行事件時執行觸發。那么,事件呢?我們接下來就嘗試使用CREATE EVENT語句,來創建事件,下面先來看下語法結構:
CREATE EVENT [IF NOT EXIST] event_nameON SCHEDULE scheduleDOevent_body
我們來詳細看下上述sql中的參數的含義:
首先,在CREATE EVENT子句之后指定事件名稱。事件名稱在數據庫模式中必須是唯一的。
新聞熱點
疑難解答