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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Mysql事件学习

發布時間:2025/4/14 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql事件学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql事件學習

在系統管理或者數據庫管理中,經常要周期性的執行某一個命令或者SQL語句。對于linux系統熟悉的人都知道linuxcron計劃任務,能很方便地實現定期運行指定命令的功能。Mysql5.1以后推出了事件調度器(Event Scheduler),和linuxcron功能一樣,能方便地實現 mysql數據庫的計劃任務,而且能精確到秒。使用起來非常簡單和方便。

由于最近需要用到事件這個功能,因此學習了一下,感覺非常棒,總結一下,方便以后使用,也希望能對其他的初學者有幫助。

一、??? 如果開啟事件

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

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

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

如果看到event_scheduleron或者PROCESSLIST中顯示有event_scheduler的信息說明就已經開啟了事件。如果顯示為off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就說明事件沒有開啟,我們需要開啟它。

開啟mysql的事件,通過如下三種方式開啟:

?? 通過動態參數修改

SET GLOBAL event_scheduler = ON;

更改完這個參數就立刻生效了

注意:還是要在my.cnf中添加event_scheduler=ON。因為如果沒有添加的話,mysql重啟事件又會回到原來的狀態了。

?? 更改配置文件然后重啟

my.cnf中的[mysqld]部分添加如下內容,然后重啟mysql

event_scheduler=ON

?? 通過制定事件參數啟動

mysqld ... --event_scheduler=ON

?

二、??? Mysql事件的語法簡介

1.??????? 創建事件的語法

CREATE

??? [DEFINER = { user | CURRENT_USER }]

??? EVENT

??? [IF NOT EXISTS]

??? event_name

??? ON SCHEDULE schedule

??? [ON COMPLETION [NOT] PRESERVE]

??? [ENABLE | DISABLE | DISABLE ON SLAVE]

??? [COMMENT 'comment']

??? DO event_body;

?

schedule:

??? AT timestamp [+ INTERVAL interval] ...

? ? ?| EVERY interval

??? [STARTS timestamp [+ INTERVAL interval] ...]

??? [ENDS timestamp [+ INTERVAL interval] ...]

interval:

? quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

????????????? WEEK | SECOND | YEAR_MONTH | DAY_HOUR |

DAY_MINUTE |DAY_SECOND | HOUR_MINUTE |

HOUR_SECOND | MINUTE_SECOND}

參數詳細說明:

DEFINER: 定義事件執行的時候檢查權限的用戶。

ON SCHEDULE schedule: 定義執行的時間和時間間隔。

ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行還是永久執行,默認為一次執行,即NOT PRESERVE

ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件創建以后是開啟還是關閉,以及在從上關閉。如果是從服務器自動同步主上的創建事件的語句的話,會自動加上DISABLE ON SLAVE

COMMENT 'comment': 定義事件的注釋。

?

2.??????? 更改事件的語法

ALTER

??? [DEFINER = { user | CURRENT_USER }]

??? 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]

3.??????? 刪除事件的語法

DROP EVENT [IF EXISTS] event_name

三、??? Mysql事件實戰

1.???????? 測試環境

創建一個用于測試的test表:

CREATE?TABLE?`test`?(
??`id`?int(11)?NOT?NULL?AUTO_INCREMENT,
??`t1`?datetime?DEFAULT?NULL,
??`id2`?int(11)?NOT?NULL?DEFAULT?'0',
??PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=106?DEFAULT?CHARSET=utf8

2.???????? 實戰1

?? 創建一個每隔3秒往test表中插入一條數據的事件,代碼如下:

CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND

ON COMPLETION PRESERVE

DO INSERT INTO test(id,t1) VALUES('',NOW());

?? 創建一個10分鐘后清空test表數據的事件

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE

DO TRUNCATE TABLE test.aaa;

?? 創建一個在2012-08-23 00:00:00時刻清空test表數據的事件,代碼如下:

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

AT TIMESTAMP '2012-08-23 00:00:00'

DO TRUNCATE TABLE test;

?? 創建一個從20128222145分開始到10分鐘后結束,運行每隔3秒往test表中插入一條數據的事件,代碼如下:

CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND

STARTS '2012-08-22 21:49:00'?

ENDS '2012-08-22 21:49:00'+ INTERVAL? 10 MINUTE

ON COMPLETION PRESERVE

DO INSERT INTO test(id,t1) VALUES('',NOW());

?

3.???????? 實戰2

通常的應用場景是通過事件來定期的調用存儲過程,下面是一個簡單的示例:

創建一個讓test表的id2字段每行加基數2的存儲過程,存儲過程代碼如下:

DROP PROCEDURE IF EXISTS test_add;

DELIMITER //

CREATE PROCEDURE test_add()

BEGIN

DECLARE 1_id INT DEFAULT 1;

DECLARE 1_id2 INT DEFAULT 0;

DECLARE error_status INT DEFAULT 0;

DECLARE datas CURSOR? FOR SELECT id FROM test;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET error_status=1;

OPEN datas;

FETCH datas INTO 1_id;

REPEAT

SET? 1_id2=1_id2+2;

UPDATE test SET id2=1_id2 WHERE id=1_id;

FETCH datas INTO 1_id;

UNTIL? error_status

END REPEAT;

CLOSE? datas;

END

//

事件設置2012-08-22 00:00:00時刻開始運行,每隔1調用一次存儲過程,40天后結束,代碼如下:

CREATE EVENT test ON SCHEDULE EVERY 1 DAY

STARTS '2012-08-22 00:00:00'

ENDS '2012-08-22 00:00:00'+INTERVAL 40 DAY

ON COMPLETION PRESERVE DO

CALL test_add();

?

四、??? 參考鏈接

http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html

http://dev.mysql.com/doc/refman/5.1/en/create-event.html

http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/

?

轉載于:https://www.cnblogs.com/feihongwuhen/archive/2012/08/23/7169799.html

總結

以上是生活随笔為你收集整理的Mysql事件学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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