MySQL中事件的使用详解
的MySQL5.1版本开始引入了事件的概念,事件是一次触发不同的事件触发和事件触发,类似于Linux crontab计划任务时间触发相关的SQL语句或存储过程被触发,在一个特定的时间点由一个单独的或调用存储过程使用。
两。应用范围
对于每隔一次有固定需求的操作,如创建表、删除数据和其他操作,可以使用事件来处理它。
例如,使用事件自动创建需要在下个月1日上午1点使用的三个表。
三。使用权限
当仅使用事件调用SQL语句时,需要查看并创建用户的事件特权。当你调用SQL语句,你需要用户的权限来执行SQL。事件的权限设置保存在mysql.user表event_priv领域和mysql.db表。
当事件和程序使用的时间,查看和创建一个存储过程需要用户创建常规许可使用时执行访问调用存储过程执行的存储过程调用的用户特定需求的SQL语句,在SQL的执行权限。
查看事件命令如下:
(1)查询mysql.event表;
(2)通过显示事件命令;
(3)通过显示完整事件命令;
(4)通过查询information_schema.events表
(5)显示创建事件。
总之,建议使用root用户创建和维护事件的低频率。
四。基本语法
4.1打开定时器
使工作事件,MySQL的全球不断event_scheduler必须在1。
-检查计时器是否打开。
复制代码代码如下所示:
显示变量like'event_scheduler;
-打开计时器0:关闭1:打开
复制代码代码如下所示:
设置全局event_scheduler = 1;
当您将事件计划设置为0或关闭时,即关闭事件计划过程时不会出现新的事件执行,但现有的运行事件将完成。
我们的网络环境中,当使用事件,注意在主库打开定时器,从图书馆的事件触发计时器,所有的操作都会记录binlog主人/奴隶,从图书馆的定时器都有可能引起。切换主库后,记得在新的主图书馆开放时间。
请特别注意它!
4.2创建事件
创建事件的语法如下所示:
创建事件
{不存在} --------------------------------------------- * 1
event_name ----------------------------------------------------- *标注2
在日程------------------------------------ * 3
{在} } {没有完成保存----------------- * 4
{使禁用} | ---------------------------------------- * 5
{ comment'comment} -------------------------------------- *标注6
做sql_statement ----------------------------------------------- *标注7
解释uff1a
注释1:{如果不存在}
如果不存在,则仅在同名事件不存在时创建它,否则将忽略它。建议使用它来确保事件创建的成功。
注释2:event_name
名称的最大长度为64个字节。名称必须在当前dateabase唯一的一个,和相同的数据库不能有相同名称的事件。
使用事件的共同工作是创建表、插入数据、删除数据、清除表和删除表。
为了避免被命名规范造成的不便,最好让事件的名称来描述整个事件的能力。建议如下:动作名称的命名规则_(进/ from_)表名_time,例如:
1。每月创建(清除/删除)粉丝表:
创建(截断/降)_table_fans_month;
2。每天从风扇表中插入(删除)数据:
插入(删除)_into(从)_fans_day;
注释3:按计划
准时制计划有两种建立计划任务的方法:
1。在时间戳上,用于完成单个计划任务。
2。每次(单位)时间单位{开始时间戳}结束时间}用于完成重复计划的任务。
在这两个计划任务,时间戳可以是一个任意的时间戳和datetime数据类型,和时间戳必须大于当前时间。
在重复计划任务中,时间单位可以是任意整数而不是null,时间单位是关键字:年、月、日、小时、分钟或秒。
提示:其他时间单位也是合法的,如季、周、year_month,day_hour,day_minute,day_second,hour_minute,hour_second,minute_second,这是不推荐使用这些非标准时间单位。
注释4:{完成时{ { } } } }
在完成说当事件不会再发生,当单任务计划后执行完毕或当重复执行结束stage.preserve是事件的执行完成后的角色不会脱落,建议利用此参数,以检查事件的具体信息。
马克:{ 5 }使|禁用
启用和禁用参数表示设置事件的状态。启用指示系统将执行事件。禁用指示系统不执行事件。
以下命令可以关闭或打开以下命令:
改变事件event_name启用/禁用
注释6:{ comment'comment}
注释中出现的元数据,这是存储在一个最大长度为64个字节的information_schema表评论专栏。'comment'indicates,注释内容放在单引号,并建议使用注释来表达更全面的信息。
注释7:做sql_statement
做sql_statement字段代表的SQL语句或存储过程的事件需要执行。这里的SQL语句可以是复合语句,例如:
开始
创建表test1; / /创建表(测试)
删除表test2; / /删除表
电话(proc_test1); / /调用存储过程
结束
使用开始和结束标识符,复合SQL语句在执行顺序中放置在它们之间。当然,SQL语句是有限的。对它的限制与函数函数中的SQL语句和trigger Trigger相同。如果不能在函数函数和trigger Trigger中使用一些SQL,那么它也不能在事件中使用:
锁定表
打开表
创建事件
改变事件
加载数据
4.3执行逻辑
对于(已建立的事件,已经创建的每个事件)
如果(事件的状态不禁用)
和(当前时间是在结束时间之前)
和(开始后的当前时间)
和(最后一次执行后的时间)
(未执行)
然后:
构建新线程
将事件传递给新线程的SQL语句
(线程在执行后自动关闭)
4.4修改事件
使用修改事件来修改事件,具体的语法如下所示,类似于创建事件的语法:
改变事件
event_name
在进度计划
{重命名为new_event_name }
{完成时{ { } } }
{ } |启用禁用
{ comment'comment}
做sql_statement
4.5删除事件
事件使用下拉事件语句删除已创建的事件,其语法如下所示:
删除事件
{如果存在}
event_name
但是,当事件正在运行时,删除事件不会导致事件停止,事件将一直执行到事件结束。使用下拉式用户和删除数据库语句将同时删除包含它们的事件。
五。常见的例子
自动调用e_test()存储过程的每一秒
复制代码代码如下所示:
如果不存在e_test创建事件
每1秒准时
完成后保存
请e_test();
统计()存储过程每个月上午1时执行。
复制代码代码如下所示:
创建事件不存在
计划每1个月就开始date_add(date_add(date_sub(CURDATE(),间隔一天(CURDATE()),1)
完成保存启用
做
开始
调用统计();
结束