[資料庫] 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;
假設現在存在一張表loginuser,包括使用者名稱、密碼、許可權三個欄位。如下圖:
CREATE EVENT testevent
ON SCHEDULE EVERY 1 DAY STARTS '2017-03-09 23:50:00'
DO
delete from loginuser where Username='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
DO
INSERT 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
DO
update 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 SCHEDULE
EVERY 5 SECOND
DO
BEGIN
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/ )
相關文章
- MySQL學習筆記-使用Navicat操作MySQL資料庫MySql筆記資料庫
- [資料庫] Navicat for MySQL定時備份資料庫及資料恢復資料庫MySql資料恢復
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- MySQL使用event等待事件進行資料庫效能診斷MySql事件資料庫
- MySQL 資料庫操作MySql資料庫
- navicat生成mysql資料字典MySql
- Mysql資料庫操作命令MySql資料庫
- PHP操作MySQL資料庫PHPMySql資料庫
- MySQL資料庫常用操作MySql資料庫
- 【Java】操作mysql資料庫JavaMySql資料庫
- MySQL資料庫基本操作MySql資料庫
- shell 操作mysql資料庫MySql資料庫
- 【Mysql】改資料庫庫名操作MySql資料庫
- 使用crontab和expdp實現資料庫定期邏輯備份資料庫
- MySQL(一) 資料表資料庫的基本操作MySql資料庫
- PHP常用操作類實現——資料庫操作類PHP資料庫
- mysql資料庫基本操作(六)MySql資料庫
- mysql資料庫基本操作(三)MySql資料庫
- mysql資料庫基本操作(四)MySql資料庫
- mysql資料庫基本操作(五)MySql資料庫
- 02、MySQL—資料庫基本操作MySql資料庫
- python資料庫(mysql)操作Python資料庫MySql
- python 操作mysql資料庫PythonMySql資料庫
- Python Mysql 資料庫操作PythonMySql資料庫
- python操作mysql資料庫PythonMySql資料庫
- 使用OTL操作MySQL資料庫MySql資料庫
- Navicat Premium 15 資料庫管理REM資料庫
- Oracle資料庫event事件與dump檔案介紹Oracle資料庫事件
- [資料庫] Navicat for MySQL換種思維解決插入同時更新資料資料庫MySql
- golang實現mysql資料庫備份GolangMySql資料庫
- Mysql資料庫使用Navicat Mysql匯入sql檔案報錯MySql資料庫
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- Mysql資料庫基礎操作命令MySql資料庫
- Python之 操作 MySQL 資料庫PythonMySql資料庫
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- MySQL系列:資料庫基本操作(1)MySql資料庫
- MySQL資料庫常用操作和技巧MySql資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql