MySql事件計劃任務

來源:互聯網
上載者:User

標籤:資料庫   計劃   程式   

MySQL5.1.x版本中引入了一項新特性EVENT,顧名思義就是事件、定時任務機制,在指定的時間單元內執行特定的任務,因此今後一些對資料定時性操作不再依賴外部程式,而直接使用資料庫本身提供的功能。

一1、 檢查你的MYSQL是否開了這個功能

        SHOW VARIABLES LIKE ‘event_scheduler‘;

        或

        SELECT @@event_scheduler;

        若顯示:

                +-----------------+-------+
                | Variable_name   | Value |
                +-----------------+-------+
                | event_scheduler | OFF   |
                +-----------------+-------+
        則可執行

         SET GLOBAL event_scheduler = 1;

        或

         SET GLOBAL event_scheduler = ON;

        來開啟,也可以直接在啟動命令加上“–event_scheduler=1”,例如:

        mysqld ... --event_scheduler=1

        my.ini or my.cnf 中的[mysqld]

        添加 event_scheduler=ON

   二、建立事件

/*標準建立語句EventsEvents

CREATE EVENT 事件任務名稱 ON SCHEDULE AT 時戳/EVERY 任意非空的整數 時間單位 [STARTS 時戳] [ENDS時戳]
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT ‘時間任務注釋‘]
DO
BEGIN
要執行的sql語句
END

ON SCHEDULE有兩種設定計劃任務的方式:
AT 時戳:單次的計劃任務
EVERY 任意非空的整數 時間單位 [STARTS 時戳] [ENDS時戳]:重複的計劃任務

設定了[STARTS 時戳] [ENDS時戳]表示只在該時間段內重複計劃任務
時戳可以是任意的TIMESTAMP 和DATETIME 資料類型。
要求提供的是將來的時間(大於CURRENT_TIMESTAMP),而且小於Unix時間的最後時間(等於或小於‘2037-12-31 23:59:59‘)。
時間單位是關鍵詞:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
提示: 其他的時間單位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR, DAY_MINUTE, DAY_SECOND, HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,但他們是非標準不實用也不需要的。

[ON COMPLETION [NOT] PRESERVE]:
不寫預設是 ON COMPLETION NOT PRESERVE,表示當這個事件不會再發生的時候,即當單次計劃任務執行完畢後或當重複性的計劃任務執行到了ENDS階段,該事件任務即被drop掉。
ON COMPLETION PRESERVE 當事件任務結束後不被drop掉
提示: 基本不需要試用這個語句。

[ENABLE | DISABLE]
不寫預設是ENABLE
設定事件的狀態,如果是Enable 的話,那麼系統就會啟動這個事件,DISABLE則不啟動
可以用修改命令開啟或關閉事件,修改事件任務只要把關鍵字CREATE換成ALTER即可。

*/

樣本:

    1)首先來看一個簡單的例子來示範每秒插入一條記錄到資料表:

        USE test;        CREATE TABLE aaa (timeline TIMESTAMP);        CREATE EVENT e_test_insert        ON SCHEDULE EVERY 1 SECOND         DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

    2) 5天后清空test表:

        CREATE EVENT e_test        ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY        DO TRUNCATE TABLE test.aaa;

    3) 2014年12月22日12點整清空test表:

        CREATE EVENT e_test        ON SCHEDULE AT TIMESTAMP ‘2014-12-22 12:00:00‘        DO TRUNCATE TABLE test.aaa;

    4) 每天定時清空test表:

        CREATE EVENT e_test        ON SCHEDULE EVERY 1 DAY        DO TRUNCATE TABLE test.aa

    5) 5天后開啟每天定時清空test表:

        CREATE EVENT e_test        ON SCHEDULE EVERY 1 DAY        STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY        DO TRUNCATE TABLE test.aaa;

    6) 每天定時清空test表,5天后停止執行:

        CREATE EVENT e_test        ON SCHEDULE EVERY 1 DAY        ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY        DO TRUNCATE TABLE test.aaa;

    7) 5天后開啟每天定時清空test表,一個月後停止執行:

        CREATE EVENT e_test        ON SCHEDULE EVERY 1 DAY        STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY        ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH        DO TRUNCATE TABLE test.aaa;        [ON COMPLETION [NOT] PRESERVE]可以設定這個事件是執行一次還是持久執行,預設為NOT PRESERVE。

    8) 每天定時清空test表(只執行一次,任務完成後就終止該事件):

        CREATE EVENT e_test        ON SCHEDULE EVERY 1 DAY        ON COMPLETION NOT PRESERVE        DO TRUNCATE TABLE test.aaa;        [ENABLE | DISABLE]可是設定該事件建立後狀態是否開啟或關閉,預設為ENABLE。        [COMMENT ‘comment’]可以給該事件加上注釋。

    三、修改事件(ALTER EVENT)

        ALTER EVENT event_name        [ON SCHEDULE schedule]        [RENAME TO new_event_name]        [ON COMPLETION [NOT] PRESERVE]        [COMMENT ‘comment‘]        [ENABLE | DISABLE]        [DO sql_statement]

    1) 臨時關閉事件

        ALTER EVENT e_test DISABLE;

    2) 開啟事件

        ALTER EVENT e_test ENABLE;

3) 將每天清空test表改為5天清空一次:

        ALTER EVENT e_test        ON SCHEDULE EVERY 5 DAY;

四、刪除事件(DROP EVENT)

        DROP EVENT [IF EXISTS] event_name

    例如刪除前面建立的e_test事件

        DROP EVENT e_test;

    當然前提是這個事件存在,否則會產生ERROR 1513 (HY000): Unknown event錯誤,因此最好加上IF EXISTS

        DROP EVENT IF EXISTS e_test;



本文出自 “Linux+PHP” 部落格,請務必保留此出處http://weichyou.blog.51cto.com/6207160/1592725

MySql事件計劃任務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.