MySQL:簡述MySQL中的事件Event

MySQL:簡述MySQL中的事件Event


一. 事件的概念

      事件:一組SQL集,用來執行定時任務,跟觸發器很像,都是被動執行的。事件是因爲時間到了觸發執行,而觸發器是因爲某件事件(增刪改)觸發執行。

二. 事件的操作

      1.查詢MYSQL的事件功能狀態
      想要使用Mysql的事件功能,前提是確保服務開啓。查詢指令如下:

select @@event_scheduler;
或
show variables like '%event_scheduler%';

      2.設置MYSQL的事件功能狀態
      鍵值1或者on表示開啓;0或者off表示關閉。指令如下:

 set global event_scheduler = 1;
 set global event_scheduler = on;

 set @@global.event_scheduler = 0;
 set @@global.event_scheduler = off;

      注意:雖然使用set global event_scheduler = on語句開啓了事件,但是每次重啓電腦。或重啓mysql服務後,會發現,事件自動關閉(event_scheduler=OFF),所以想讓事件一直保持開啓,需要修改配置文件,讓mysql服務啓動的時候開啓事件,只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

編輯mysql的配置文件my.cnf,在[mysqld]中添加下面一行代碼
[mysqld]
event_scheduler=ON

重啓Mysql服務,執行命令查看事件服務是否開啓,指令如下
service mysqld restart --event_scheduler=ON

      3.創建MYSQL的事件
      事件類型分爲兩種,一個是間隔觸發,另一個是特定事件觸發。

      事件參數說明:
        a. DEFINER:創建者。
        b. ON COMPLETION [NOT] PRESERVE :表示當事件不會再發生的情況下,刪除事件(注意特定時間執行的事件,如果設置了該參數,執行完畢後,事件將被刪除,不想刪除的話可以設置成ON COMPLETION PRESERVE);
        c. ENABLE:表示系統將執行這個事件;
        d. ON SCHEDULE * :表示執行時間,頻率。頻率可爲year,quarter,month,day,hour,minute,week,second,year_month,day_hour,day_minute,day_second,hour_minute,hour_second,minute_second等情況。

當爲on completion preserve 的時候,如果event到期了,event會被disable,但是該event還是會存在;
當爲on completion not preserve的時候,如果event到期的時候,該event會被自動刪除掉。

      4.查看MYSQL的事件

show events;

      5.對指定MYSQL的事件進行開關

開啓某事件:alter event event_name on completion preserve enable;
關閉某事件:alter event event_name on completion preserve disable;

三. 實現樣例

drop table if exists table_timestamp;
create table table_timestamp
(
   message_pk          bigint not null auto_increment,

   message_content     varchar(99),

   /* 創建時間不可爲空*/
   CreateTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間' ,

   primary key (message_pk)
);

第一種類型:每隔一分鐘插入一條數據
DROP EVENT IF EXISTS event_minute;
DELIMITER $$
CREATE DEFINER=root@localhost EVENT event_minute 
    ON SCHEDULE EVERY 1 MINUTE STARTS '2019-01-14 17:00:00' 
    ON COMPLETION NOT PRESERVE ENABLE 
    DO 
        BEGIN
            insert into table_timestamp(message_content) VALUES('Message內容-1');
        END $$
DELIMITER ;

注意:STARTS只是從這時間起線程開始執行,比如說現在時間是2019-01-14 17:00:00執行此SQL語句,要等2019-01-14 17:01:00纔開始生效)

第二種類型:特定時間插入一條數據,如'2019-01-14 18:00:00'
DROP EVENT IF EXISTS event_at;
DELIMITER $$
CREATE DEFINER=root@localhost EVENT event_at 
    ON SCHEDULE AT '2019-01-14 18:00:00' 
    ON COMPLETION NOT PRESERVE ENABLE 
    DO 
        BEGIN
            insert into table_timestamp(message_content) VALUES('指定時間-Message內容-1');
        END $$
DELIMITER ;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章