搜尋
首頁資料庫mysql教程mysql创办定时器(event),查看定时器,打开定时器,设置定时器

mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间 mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间 ? 转自:http://blog.sina.com.cn/s/blog_6d39ac7e01017sd6.html 注:mysql版本是从5.1开始才支持event的。如果你的版

mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间

mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间

? 转自:http://blog.sina.com.cn/s/blog_6d39ac7e01017sd6.html

注:mysql版本是从5.1开始才支持event的。如果你的版本低于5.1就先升级版本吧。

查看版本的方法有很多,这里只给大家提供一个????select version();

1.查看是否开启event与开启event。

1.1、MySQL event功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的。

?????????????<span class="Apple-converted-space">?</span>show VARIABLES?LIKE?'%sche%'; <span>1.2、开启evevt功能</span> <code>???????????<span class="Apple-converted-space">?</span>SET?GLOBAL?event_scheduler = 1; 2.创建定时器的过程 <span>2.1、创建测试表test<br>drop table if exists test;<br>create table test<br>(<br>id int(11) not null auto_increment primary key,<br>time datetime not null<br>) engine=innodb default charset=utf8;</span> <span>2.2、创建evevt要调用的存储过程test_proce</span> <span>delimiter //<span><span class="Apple-converted-space">?</span>-- 定义分隔符,必须要有,可以不是//</span><br>drop procedure if exists test_proce;<br>create procedure test_proce()<br>begin<br>insert into test(time) values(now());<br>end//<span>注意看清楚了,这个end后面有你在前面定义的分割符号</span></span> delimiter // <span>2.3、开启evevt(要使定时起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1)<br>执行show variables like 'event_scheduler';查看evevt是否开启;<br>若没开启执行set global event_scheduler='on';</span> <span>2.4、创建事件test_event(其作用:每隔一秒自动调用test_proce()存储过程)<br>drop event if exists test_event;<br>create event test_event<br>on schedule every 1 second<br>on completion preserve disable<br>do call test_proce();<br>2.5、开启事件test_event<br>alter event test_event on completion preserve enable;<br>2.6、关闭事件test_event<br>alter event test_event on completion preserve disable;<br>2.7、查看表test<br>select * from test;</span> ? <span>3.查看自己创建的event</span> <span>如果要查看更加详细的信息,你需要root用户的授权,如果是你自己的数据库你可以用下面语句查看</span> select * from?<span class="Apple-converted-space">?</span>mysql.event; <br>4.event的时间设置 设置event很简单,但是麻烦的是如何设置执行的时间,网上找了一些,自己总结了一下。 先看语句,如下面这个 <code>????<span class="Apple-converted-space">?</span>CREATE?EVENT test_event?ON?SCHEDULE<span class="Apple-converted-space">?</span><span>EVERY</span><span class="Apple-converted-space">?</span>1?DAY?<span>STARTS</span>?'2012-09-24 00:00:00' ????<span class="Apple-converted-space">?</span>ON?COMPLETION PRESERVE ENABLE DO CALL test_procedure(); EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year<span>?</span> <span>从2013年1月13号0点开始,每天运行一次</span> <span><span>ON</span><span class="Apple-converted-space">?</span><code>SCHEDULE EVERY 1?DAY?STARTS?'2013-01-13 00:00:00' <span>从现在开始每隔九天定时执行</span> <span><span>ON</span><span class="Apple-converted-space">?</span><code>SCHEDULE EVERY 9 DAY?STARTS NOW()?; <span>每个月的一号凌晨1 点执行</span> <span>on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);</span> <span>每个季度一号的凌晨1点执行</span> <span>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 1 hour);</span> <span>每年1月1号凌晨1点执行</span> <span>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 1 hour);</span> ? <span>其他的 就大家自由组合了。。</span> ? ? 附录 ? 1>使用权限

单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。

当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。

?

查看EVENT命令有如下几种:

?

(1)查询mysql.event表;

(2)通过SHOW EVENTS命令;

(3)通过SHOW FULL EVENTS命令;

(4)通过查询information_schema.events表

(5)SHOW CREATE EVENT。

总之,event的使用频率较低建议使用root用户进行创建和维护。

?

2>CREATE EVENT 的语法

CREATE EVENT

[IF NOT EXISTS] ------------------------------------------------*标注1

event_name -----------------------------------------------------*标注2

ON SCHEDULE schedule -------------------------------------------*标注3?

[ON COMPLETION [NOT] PRESERVE] ---------------------------------*标注4

[ENABLE | DISABLE] ---------------------------------------------*标注5?

[COMMENT 'comment'] --------------------------------------------*标注6?

DO sql_statement ;----------------------------------------------*标注7

?

说明:

标注1:[IF NOT EXISTS]

???????使用IF NOT EXISTS,只有在同名event不存在时才创建,否则忽略。建议不使用以保证event创建成功。

?

标注2:event_name

??????名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。

??????使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。

??????为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:

??????动作名称_(INTO/FROM_)??表名_TIME,例如:

???????????????????????????????????????????????1.每月创建(清空/删除)fans表:?

?????????????????????????????????????????????????????????????????????????create(truncate/drop)_table_fans_month;

???????????????????????????????????????????????2.每天从fans表插入(删除)数据:?

?????????????????????????????????????????????????????????????????????????insert(delete)_into(from)_fans_day;

?

标注3:ON SCHEDULE

???????ON SCHEDULE 计划任务,有两种设定计划任务的方式:

???????1. AT 时间戳,用来完成单次的计划任务。

???????2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

?

???????在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

???????在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式.

???????时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

???????提示: 其他的时间单位也是合法的如:

?????????QUARTER, WEEK,YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND

??????????????????不建议使用上一行这些不标准的时间单位。

?

标注4: [ON COMPLETION [NOT] PRESERVE]

????????ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

?

标注5:[ENABLE | DISABLE]

???????参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

?????????可以用如下命令关闭或开启事件:

?????????????????????????????????????ALTER EVENT event_name ?ENABLE/DISABLE

?

标注6:[COMMENT 'comment']

????????注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。

????????'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。

?

标注7: DO sql_statement

????????DO sql_statement字段表示该event需要执行的SQL语句或存储过程。

????????这里的SQL语句可以是复合语句,例如:

???????????????????????????????????????????BEGIN

???????????????????????????????????????????CREATE TABLE test1;//创建表(需要测试一下)

???????????????????????????????????????????DROP TABLE test2;//删除表

???????????????????????????????????????????CALL proc_test1();//调用存储过程

???????????????????????????????????????????END

使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:

??????????????????????????LOCK TABLES

??????????????????????????UNLOCK TABLES

??????????????????????????CREATE EVEN

??????????????????????????ALTER EVENT

??????????????????????????LOAD DATA

?

3>执行逻辑

For (已建立事件each event that has been created)

If (事件的状态非DISABLE)

And (当前时间在ENDS时间之前)

And (当前时间在STARTS时间之后)

And (在上次执行后经过的时间)

And (没有被执行)

Then:

建立一个新的线程

传递事件的SQL语句给新的线程

(该线程在执行完毕后会自动关闭)

?

4>修改事件

?

使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:

ALTER EVENT???event_name

ON SCHEDULE schedule

[RENAME TO new_event_name]

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement;

?

5>删除事件

?

EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:

DROP EVENT??[IF EXISTS]??event_name;

?

但当一个事件正在运行中时,删除该事件不会导致事件停止,事件会执行到完毕为止。使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL的角色:Web應用程序中的數據庫MySQL的角色:Web應用程序中的數據庫Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

mysql:構建您的第一個數據庫mysql:構建您的第一個數據庫Apr 17, 2025 am 12:22 AM

構建MySQL數據庫的步驟包括:1.創建數據庫和表,2.插入數據,3.進行查詢。首先,使用CREATEDATABASE和CREATETABLE語句創建數據庫和表,然後用INSERTINTO語句插入數據,最後用SELECT語句查詢數據。

MySQL:一種對數據存儲的初學者友好方法MySQL:一種對數據存儲的初學者友好方法Apr 17, 2025 am 12:21 AM

MySQL適合初學者,因為它易用且功能強大。 1.MySQL是關係型數據庫,使用SQL進行CRUD操作。 2.安裝簡單,需配置root用戶密碼。 3.使用INSERT、UPDATE、DELETE、SELECT進行數據操作。 4.複雜查詢可使用ORDERBY、WHERE和JOIN。 5.調試需檢查語法,使用EXPLAIN分析查詢。 6.優化建議包括使用索引、選擇合適數據類型和良好編程習慣。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版