日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[数据库] Navicat for MySQL事件Event实现数据每日定期操作

發布時間:2024/5/28 数据库 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据库] Navicat for MySQL事件Event实现数据每日定期操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 在我們操作數據庫過程中,通常會遇到一些某個時間點操作數據庫的問題,例如:
? ? ? ? (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 inserteventON 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 updateeventON 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 e ON SCHEDULEEVERY 5 SECOND DO BEGINDECLARE v INTEGER;DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;SET v = 0;WHILE v < 5 DOINSERT 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实现数据每日定期操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。