Mysql數據庫事件使用與示例


1 事件簡介

    事件(event)是MySQL在相應的時刻調用的過程式數據庫對象。一個事件可調用一次,也可周期性的啟動,它由一個特定的線程來管理的,也就是所謂的“事件調度器”。

    事件和觸發器類似,都是在某些事情發生的時候啟動。當數據庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據調度事件來啟動的。由於他們彼此相似,所以事件也稱為臨時性觸發器。

    事件取代了原先只能由操作系統的計划任務來執行的工作,而且MySQL的事件調度器可以精確到每秒鍾執行一個任務,而操作系統的計划任務(如:Linux下的CRON或Windows下的任務計划)只能精確到每分鍾執行一次。

2 事件的優缺點
    2.1 優點

    一些對數據定時性操作不再依賴外部程序,而直接使用數據庫本身提供的功能。

    可以實現每秒鍾執行一個任務,這在一些對實時性要求較高的環境下就非常實用了。

    2.2 缺點
    定時觸發,不可以調用。

3 事件創建

  一條create event語句創建一個事件。每個事件由兩個主要部分組成,第一部分是事件調度(event schedule),表示事件何時啟動以及按什么頻率啟動,第二部分是事件動作(event action ),這是事件啟動時執行的代碼,事件的動作包含一條SQL語句,它可能是一個簡單地insert或者update語句,也可以使一個存儲過程或者benin...end語句塊,這兩種情況允許我們執行多條SQL。

    一個事件可以是活動(打開)的或停止(關閉)的,活動意味着事件調度器檢查事件動作是否必須調用,停止意味着事件的聲明存儲在目錄中,但調度器不會檢查它是否應該調用。在一個事件創建之后,它立即變為活動的,一個活動的事件可以執行一次或者多次。

  一、   如果開啟事件

    在使用事件這個功能,首先要保證你的mysql的版本是5.1以上,然后還要查看你的mysql服務器上的事件是否開啟。

    查看事件是否開啟,使用如下命令查看:

    SHOW VARIABLES LIKE 'event_scheduler';  

            

    通過動態參數修改 SET GLOBAL event_scheduler = ON;

    更改完這個參數就立刻生效了  注意:還是要在my.ini 中添加event_scheduler=ON。因為如果沒有添加的話,mysql重啟事件又會回到原來的狀態了。

 創建語句方式:

create event [ if not exists  ] EVENT_NAME 

on schedule SCHEDULE

[ on completion [ not ] preserve ]  //not即計划任務執行完畢后自動刪除該事件,默認操作。

[ enable | disable ]

[ comment COMMENT ]

do SQL;

  注釋:所有中括號([])中的內容為可寫選項(下同)

 

       EVENT_NAME:你自己想要設置的事件名稱

       SCHEDULE :    方式一: at TIMESTAMP(必須是'2017-09-11 17 :00:00' 這種格式) 

            方式二: every INTERVAL(整數值)  UNIT(時間單位,可以是:YEAR | QUARTER | MONTH | DAY | HOUR| MINUTE |WEEK | SECOND | YEAR_MONTH |DAY_HOUR                  |DAY_MINUTE|DAY_SECOND| HOUR_MINUTE |HOUR_SECOND| MINUTE_SECOND) 

                    [  starts  TIMESTAMP(同上)  [ + interval(必須寫) INTERVAL(整數值) UNIT(同上) ]  ]  

                 [  ends TIMESTAMP(同上)   [ + interval(必須寫) INTERVAL(整數值) UNIT(同上) ] ]

        COMMENT:填寫的注釋,utf8字符集時不能是中文。長度也不能超過64個字節。

        SQL:需要執行的sql語句。(可以是存儲過程)

  

   注意:

         通過show events只能查看當前庫中創建的事件

      事件執行完即釋放,如立即執行事件,執行完后,事件便自動刪除,多次調用事件或等待執行事件可以查看到。

      如果兩個事件需要在同一時刻調用,mysql會確定調用他們的順序,如果要指定順序,需要確保一個事件至少在另一個事件1秒后執行

      對於遞歸調度的事件,結束日期不能在開始日期之前。

      select可以包含在一個事件中,然而他的結果消失了,就好像沒執行過。

 事件修改

更改事件的語法

ALTER

    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]

   注意:這里的大寫是必須這么寫的,小寫同創建的代名詞一樣。   

 事件刪除  

DROP EVENT [IF EXISTS]  event_name(代名詞)

            

 


免責聲明!

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



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