[資料庫] Navicat for MySQL事件Event實現資料每日定期操作

來源:互聯網
上載者:User

標籤:into   stat   語句   狀態   建立   and   while   改變   center   

        在我們操作資料庫過程中,通常會遇到一些某個時間點操作資料庫的問題,例如:
        (1).每天淩晨12點對資料庫進行定時備份,結算和匯總;
        (2).每天淩晨2點刪除資料庫前三天的資料;
        (3).插入某個資料超過一定時間改變某個值的狀態,比如預警系統。
        這裡就需要通過Event事件進行簡單操作,下面將詳細處理。你可能會想到通過觸發器實現,但是如果是同一張表Insert插入資料後,但是觸發器再進行Update更新操作是不行的,所以需要嘗試通過Event事件解決。
        在前面講過一篇文章:[資料庫] Navicat for MySQL觸發器更新和插入操作
        希望這篇文章對你有所協助,如果文章中出現錯誤或不足之處,還請海涵~


一. Event實現每日某個時刻刪除事件

        首先通過Navicat for MySQL查看Event事件是否開啟,具體代碼:

show variables like ‘%sche%‘;
        通常事件是開啟的,如所示:


        如果沒有開啟,需要資料庫超級使用權限設定。

set global event_scheduler =1;
        其中event_scheduler為ON表示開啟,OFF表示關閉,如下:
+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| event_scheduler | OFF   |+-----------------+-------+        下面開始寫事件進行操作。
        假設現在存在一張表loginuser,包括使用者名稱、密碼、許可權三個欄位。如:



        目前時間點為2017年3月9日 23:48,我們設定23:50執行刪除eastmount資料操作。其中SQL語句的Event代碼如下:
CREATE EVENT testeventON SCHEDULE EVERY 1 DAY STARTS ‘2017-03-09 23:50:00‘  DOdelete from loginuser where Username=‘eastmount‘;
        建立事件可以查看到的,如所示:



        然後過了23:50執行查詢語句就會發現eastmount使用者已經被刪除。


        點開事件如所示,但我更推薦大家寫SQL語句。



        通過上面這段SQL語句,我們知道了最簡單的Event事件,下面進一步加深介紹。備份資料加個備份SQL語句執行即可。
        參考官網:https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html


二. Event實現每隔某段時間定時插入事件

        在使用事件Event中,需要開啟和關閉事件,使用的代碼如下:
        關閉事件:ALTER EVENT testevent DISABLE;
        開啟事件:ALTER EVENT testevent ENABLE;
        查看事件是否開啟的代碼如下:

SELECT * FROM mysql.event;
        輸出如所示:


        下面定義每隔10秒插入一行資料的事件,比如即時接收交通資料資訊等即時處理,通常會使用該方法進行插入操作。建立一個表logininfo,記錄登入資訊,欄位包括:ID序號(主鍵、遞增INT型)、NAME使用者名稱、STARTTIME(登入時間)、ENDTIME(登出時間)、STATE(狀態 0-離線 1-線上)。


        SQL語句建立EVENT事件如下:
CREATE EVENT insertevent    ON SCHEDULE EVERY 10 SECOND     DOINSERT INTO logininfo(NAME,STARTTIME,STATE) values(‘test01‘,now(),‘1‘);
        運行結果如所示:


        可以看到,每隔10秒就插入一組資料,該事件正確執行。
        注意:在真實的開發過程中,會遇到mysql服務重啟或斷電等情況,此時則會出現時間調度器被關閉的情況,所有事件都不起作用,解決方案,需要在mysql.ini檔案中加入 "event_scheduler = ON;" 語句。



三. Event實現超過某個時間更新狀態

        假設現在有一個警示系統,當使用者進入房間開始計時,當使用者在放在中待了2小時就開始警示,設定狀態。資料如下:


        SQL語句查詢返回結果如下:
select current_timestamp, starttime, timestampdiff(SECOND,starttime,current_timestamp) as T from logininfo;
        輸出結果如所示,每隔10秒會插入一個資料,所以不斷更新。

        現在的更新UPDATE的語句如下所示:

CREATE EVENT updateevent    ON SCHEDULE EVERY 10 SECOND     DOupdate logininfo set STATE=0 WHERE timestampdiff(SECOND,starttime,current_timestamp)>300 and STATE=1;
        然後查詢即時更新狀態的SQL語句如下:
select ID, STATE, current_timestamp, starttime, timestampdiff(SECOND,starttime,current_timestamp) as T from logininfo;
        輸出如所示,發現302可能是查過300秒,可能即時更新的延誤,但不影響效果的。



        講到這裡,一個簡單預警系統的資料庫就設定完成,總共我們設定了3個事件,如所示:


        補充一段代碼:

delimiter //CREATE EVENT eON SCHEDULE    EVERY 5 SECONDDOBEGIN    DECLARE v INTEGER;    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;    SET v = 0;    WHILE v < 5 DO        INSERT INTO t1 VALUES (0);            UPDATE t2 SET s1 = s1 + 1;        SET v = v + 1;    END WHILE;END //delimiter ;

        最後希望文字對您有所協助,基礎性文章,如果存在錯誤或不足之處,還請海涵~
        最近自己和她太操勞,自己需要多付出點,多學點,多為她做點,forever。
       (By:Eastmount 2017-03-10 中午12點   http://blog.csdn.net//eastmount/ )


[資料庫] Navicat for MySQL事件Event實現資料每日定期操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.