(14)mysql中的事件,14mysql中事件

來源:互聯網
上載者:User

(14)mysql中的事件,14mysql中事件
概述

事件調度器是MySQL5.1後新增的功能,可以將資料庫按自訂的時間周期觸發某種操作,可以理解為時間觸發器,類似於linux系統下面的任務調度器crontab,或者類似與window下面的計劃任務。值得一提的是MySQL的事件調度器可以精確到每秒鐘執行一個任務,而作業系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執行一次。

查看事件功能是否開啟

在使用事件這個功能,首先要保證你的mysql的版本是5.1以上,然後還要查看你的mysql伺服器上的事件是否開啟。
查看事件是否開啟,使用如下命令查看:

#方式一SHOW VARIABLES LIKE 'event_scheduler';#方式二SELECT @@event_scheduler;#方式三SHOW PROCESSLIST;#查看事件狀態SHOW EVENTS;

如果看到event_scheduler為on或者PROCESSLIST中顯示有event_scheduler的資訊說明就已經開啟了事件。如果顯示為off或者在PROCESSLIST中查看不到event_scheduler的資訊,那麼就說明事件沒有開啟,我們需要開啟它。

開啟事件功能

方式一、通過動態參數修改

SET GLOBAL event_scheduler = ON;

更改完這個參數就立刻生效了,但是重啟mysql又還原了,即設定不能跨重啟。
方式二、更改設定檔然後重啟
在my.cnf中的[mysqld]部分添加如下內容,然後重啟mysql。

event_scheduler=ON;

一勞永逸,需要能夠修改資料庫配置的許可權。

方式三、直接在啟動命令加上“–event_scheduler=1”

mysqld ... --event_scheduler=ON
事件的文法 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}

DEFINER: 定義事件執行的時候檢查許可權的使用者。
ON SCHEDULE schedule: 定義執行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行還是永久執行,預設為一次執行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件建立以後是開啟還是關閉,以及在從上關閉。如果是從伺服器自動同步主上的建立事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT ‘comment’: 定義事件的注釋。

2. 變更事件
ALTER    [DEFINER = { user | CURRENT_USER }]    EVENT event_name    [ON SCHEDULE schedule]    [ON COMPLETION [NOT] PRESERVE]    [RENAME TO new_event_name]    [ENABLE | DISABLE | DISABLE ON SLAVE]    [COMMENT 'comment']    [DO event_body]
3. 刪除事件的文法
DROP EVENT [IF EXISTS] event_name;
事件使用舉例 1. 建立事件

舉例一
定時每隔3秒向表test2中插入資料

create event event_insert_t2on schedule every 3 secondon completion preservedo insert into test2(department,time_v) value('1',now());

執行結果

舉例二
建立一個10分鐘後清空test表資料的事件

CREATE EVENT IF NOT EXISTS event_truncate_test2ON SCHEDULEAT CURRENT_TIMESTAMP + INTERVAL 10 MINUTEDO TRUNCATE TABLE test2;

舉例三
建立一個在2015-04-17 14:42:00時刻清空test表資料的事件

DROP EVENT IF EXISTS event_truncate_test2;CREATE EVENT event_truncate_test2ON SCHEDULEAT TIMESTAMP '2015-04-17 14:42:00'DO TRUNCATE TABLE test2;

舉例四
5天后開啟每天定時3秒向表test2中插入資料,一個月後停止執行

CREATE EVENT IF NOT EXISTS event_truncate_test2ON SCHEDULE EVERY 3 SECONDSTARTS CURRENT_TIMESTAMP + INTERVAL 5 dayENDS CURRENT_TIMESTAMP + INTERVAL  1 monthON COMPLETION PRESERVEDO INSERT INTO test2(department,time_v) VALUES('1',NOW());
修改事件舉例

舉例一
臨時關閉事件

alter event event_insert_t2 disable;

其他類似建立事件。

刪除事件舉例
DROP EVENT IF EXISTS event_insert_t2;

事件調用預存程序或函數如同普通調用。

事件的優缺點及應用情境 參考

http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/
http://blog.chinaunix.net/uid-20639775-id-3323098.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.