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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

数据库

mysql事件计划自动_逐步讲解MySQL中定时事件计划的创建

發(fā)布時(shí)間:2024/9/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql事件计划自动_逐步讲解MySQL中定时事件计划的创建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、使用過(guò)程1.查看當(dāng)前是否已開(kāi)啟事件計(jì)劃(調(diào)度器)有3種方法:

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

2. 開(kāi)啟事件計(jì)劃(調(diào)度器)開(kāi)關(guān)有4種方法:

SET GLOBAL event_scheduler = 1;

SET @@global.event_scheduler = 1;

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

鍵值1或者ON表示開(kāi)啟;0或者OFF表示關(guān)閉;

3.關(guān)于事件計(jì)劃的權(quán)限:

單獨(dú)使用event調(diào)用SQL語(yǔ)句時(shí),查看和創(chuàng)建需要用戶具有event權(quán)限,調(diào)用該SQL語(yǔ)句時(shí),需要用戶具有執(zhí)行該SQL的權(quán)限。Event權(quán) 限的設(shè)置保存在mysql.user表和mysql.db表的Event_priv字段中。(FLUSH PRIVILEGES;)

當(dāng)event和procedure配合使用的時(shí)候,查看和創(chuàng)建存儲(chǔ)過(guò)程需要用戶具有create routine權(quán)限,調(diào)用存儲(chǔ)過(guò)程執(zhí)行時(shí)需要使用excute權(quán)限,存儲(chǔ)過(guò)程調(diào)用具體的SQL語(yǔ)句時(shí),需要用戶具有執(zhí)行該SQL的權(quán)限。

SELECT HOST,USER,Event_priv FROM mysql.user;

獲取當(dāng)前登陸的用戶和數(shù)據(jù)庫(kù):SELECT CURRENT_USER(), SCHEMA();

從Figure1可以知道bfsql@%是沒(méi)有Event_priv權(quán)限的,在該用戶下創(chuàng)建事件的時(shí)候會(huì)出現(xiàn)下面的錯(cuò)誤:

Error Code: 1044Access denied for user 'bfsql'@'%' to database 'blog'

如果出現(xiàn)上面的錯(cuò)誤,執(zhí)行下面的SQL就可以給bfsql@%賦予創(chuàng)建Event的權(quán)限:

UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='bfsql';

FLUSH PRIVILEGES;

最后,你可以通過(guò)SHOW GRANTS FOR 'bfsql'@'%';查看所有權(quán)限;

4.創(chuàng)建事件:

(1)創(chuàng)建事件的語(yǔ)法如下:

CREATE EVENT [IF NOT EXISTS] event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement

(2)創(chuàng)建事件的示例如下:

DELIMITER $$

CREATE EVENT IF NOT EXISTS e_blog

ON SCHEDULE EVERY 30 SECOND

ON COMPLETION PRESERVE

DO BEGIN

CALL MoveBlogData();

END$$

DELIMITER ;

DO sql_statement字段表示該event需要執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程。這里的SQL語(yǔ)句可以是復(fù)合語(yǔ)句,使用BEGIN和END標(biāo)識(shí)符將復(fù)合SQL語(yǔ)句按照?qǐng)?zhí)行順序放在之間。

--從現(xiàn)在開(kāi)始每隔九天定時(shí)執(zhí)行

CREATE EVENT EVENT1

ON SCHEDULE EVERY 9 DAY STARTS NOW()

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL TOTAL();

END

--每個(gè)月的一號(hào)凌晨1 點(diǎn)執(zhí)行

CREATE EVENT EVENT2

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL STAT();

END

---每個(gè)季度一號(hào)的凌晨2點(diǎn)執(zhí)行

CREATE EVENT TOTAL_SEASON_EVENT

ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL SEASON_STAT();

END

--每年1月1號(hào)凌晨四點(diǎn)執(zhí)行

CREATE EVENT TOTAL_YEAR_EVENT

ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN

CALL YEAR_STAT();

END

5.事件開(kāi)啟與關(guān)閉:

開(kāi)啟某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;

關(guān)閉某事件:

ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;

二、實(shí)例:mysql定時(shí)器是系統(tǒng)給提供了event,而oracle里面的定時(shí)器是系統(tǒng)給提供的job。廢話少說(shuō),下面創(chuàng)建表:

create table mytable (

id int auto_increment not null,

name varchar(100) not null default '',

introduce text not null,

createtime timestamp not null,

constraint pk_mytable primary key(id)

)

創(chuàng)建存儲(chǔ)過(guò)程,這里的存儲(chǔ)過(guò)程主要提供給mysql的定時(shí)器event來(lái)調(diào)用去執(zhí)行:

create procedure mypro()

BEGIN

insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());

end;

這里只是簡(jiǎn)單的寫(xiě)了一下,只是為了說(shuō)明例子。

緊接著創(chuàng)建mysql的定時(shí)器event:

create event if not exists eventJob

on schedule every 1 second

on completion PRESERVE

do call mypro();

這里設(shè)置為每一秒執(zhí)行一次

至此所有的準(zhǔn)備工作已經(jīng)寫(xiě)完了,做完這些,mysql要想利用定時(shí)器必須的做準(zhǔn)備工作,就是把mysql的定時(shí)器給開(kāi)啟了:

SET GLOBAL event_scheduler = 1; -- 啟動(dòng)定時(shí)器

SET GLOBAL event_scheduler = 0; -- 停止定時(shí)器

緊接著還要開(kāi)啟事件:

ALTER EVENT eventJob ON COMPLETION PRESERVE ENABLE; -- 開(kāi)啟事件

ALTER EVENT eventJob ON COMPLETION PRESERVE DISABLE; -- 關(guān)閉事件

SHOW VARIABLES LIKE '%sche%'; -- 查看定時(shí)器狀態(tài)

至此,你去數(shù)據(jù)庫(kù)里面的表mytable里面看下,系統(tǒng)會(huì)每隔一秒去插入一條數(shù)據(jù),嘻嘻,任務(wù)完成了。

select * from mytable

本文標(biāo)題: 逐步講解MySQL中定時(shí)事件計(jì)劃的創(chuàng)建

本文地址: http://www.cppcns.com/shujuku/mysql/148942.html

總結(jié)

以上是生活随笔為你收集整理的mysql事件计划自动_逐步讲解MySQL中定时事件计划的创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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