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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Mysql事件学习

發(fā)布時(shí)間:2025/4/14 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql事件学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mysql事件學(xué)習(xí)

在系統(tǒng)管理或者數(shù)據(jù)庫(kù)管理中,經(jīng)常要周期性的執(zhí)行某一個(gè)命令或者SQL語(yǔ)句。對(duì)于linux系統(tǒng)熟悉的人都知道linuxcron計(jì)劃任務(wù),能很方便地實(shí)現(xiàn)定期運(yùn)行指定命令的功能。Mysql5.1以后推出了事件調(diào)度器(Event Scheduler),和linuxcron功能一樣,能方便地實(shí)現(xiàn) mysql數(shù)據(jù)庫(kù)的計(jì)劃任務(wù),而且能精確到秒。使用起來(lái)非常簡(jiǎn)單和方便。

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

一、??? 如果開啟事件

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

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

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

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

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

?? 通過動(dòng)態(tài)參數(shù)修改

SET GLOBAL event_scheduler = ON;

更改完這個(gè)參數(shù)就立刻生效了

注意:還是要在my.cnf中添加event_scheduler=ON。因?yàn)槿绻麤]有添加的話,mysql重啟事件又會(huì)回到原來(lái)的狀態(tài)了。

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

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

event_scheduler=ON

?? 通過制定事件參數(shù)啟動(dòng)

mysqld ... --event_scheduler=ON

?

二、??? Mysql事件的語(yǔ)法簡(jiǎn)介

1.??????? 創(chuàng)建事件的語(yǔ)法

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}

參數(shù)詳細(xì)說(shuō)明:

DEFINER: 定義事件執(zhí)行的時(shí)候檢查權(quán)限的用戶。

ON SCHEDULE schedule: 定義執(zhí)行的時(shí)間和時(shí)間間隔。

ON COMPLETION [NOT] PRESERVE: 定義事件是一次執(zhí)行還是永久執(zhí)行,默認(rèn)為一次執(zhí)行,即NOT PRESERVE

ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件創(chuàng)建以后是開啟還是關(guān)閉,以及在從上關(guān)閉。如果是從服務(wù)器自動(dòng)同步主上的創(chuàng)建事件的語(yǔ)句的話,會(huì)自動(dòng)加上DISABLE ON SLAVE

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

?

2.??????? 更改事件的語(yǔ)法

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.??????? 刪除事件的語(yǔ)法

DROP EVENT [IF EXISTS] event_name

三、??? Mysql事件實(shí)戰(zhàn)

1.???????? 測(cè)試環(huán)境

創(chuàng)建一個(gè)用于測(cè)試的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.???????? 實(shí)戰(zhàn)1

?? 創(chuàng)建一個(gè)每隔3秒往test表中插入一條數(shù)據(jù)的事件,代碼如下:

CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND

ON COMPLETION PRESERVE

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

?? 創(chuàng)建一個(gè)10分鐘后清空test表數(shù)據(jù)的事件

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE

DO TRUNCATE TABLE test.aaa;

?? 創(chuàng)建一個(gè)在2012-08-23 00:00:00時(shí)刻清空test表數(shù)據(jù)的事件,代碼如下:

CREATE EVENT IF NOT EXISTS test

ON SCHEDULE

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

DO TRUNCATE TABLE test;

?? 創(chuàng)建一個(gè)從201282221點(diǎn)45分開始到10分鐘后結(jié)束,運(yùn)行每隔3秒往test表中插入一條數(shù)據(jù)的事件,代碼如下:

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.???????? 實(shí)戰(zhàn)2

通常的應(yīng)用場(chǎng)景是通過事件來(lái)定期的調(diào)用存儲(chǔ)過程,下面是一個(gè)簡(jiǎn)單的示例:

創(chuàng)建一個(gè)讓test表的id2字段每行加基數(shù)2的存儲(chǔ)過程,存儲(chǔ)過程代碼如下:

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

//

事件設(shè)置2012-08-22 00:00:00時(shí)刻開始運(yùn)行,每隔1調(diào)用一次存儲(chǔ)過程,40天后結(jié)束,代碼如下:

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/

?

轉(zhuǎn)載于:https://www.cnblogs.com/feihongwuhen/archive/2012/08/23/7169799.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。