mysql中的事件計划(event scheduler)


事件計划是mysql中的對象,其中的sql語句會由經過特定時間段來觸發。按照官方文檔上的說明,這個概念與'時間觸發器(temperal trigger)'是有區別的。從根本上來說evnet scheduler是對特定時間段的響應,而trigger是對特定表上發生的特定事件的響應。
事件計划在sql標准中並沒有定義,但是在其他數據庫中可以看到類似的概念。mysql中的事件有一下一些主要的特征:
1. mysql中的事件由名稱和其所處的數據庫唯一確定
2. mysql中的事件是按照時間表運行的動作。動作的定義如果有需要可以使用復合語句begin...end。事件的時間可以是一次性的,也可以是周期性的。周期性的事件可以定義開始日期時間,結束日期時間。默認的程序從創建完成開始周期性運行,不會自動結束,直到該程序被禁用或者刪除。如果在一個周期內程序沒有正常運行結束,會在同一時間有幾個程序實例運行。
3. 用戶能用sql語句創建,修改和刪除事件,事件中若有語法問題,mysql會報錯。
4. 事件的性質可以用sql語句來設置和修改,這些性質包括:事件名,時間, 過期后是否保留, 狀態, 執行的動作, 所在數據庫。(alter event)
5. 事件動作可以包含存儲過程,函數,觸發器中的大部分語句。

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}

示例:

    ## 創建一次性計划
    REATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;

    ## 周期性計划
    CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM