创建[定义者=用户)事件(如果不存在)event_name按计划时间表(在完成[不]保存][启用禁用| |禁用在奴隶][评论”字符串']做event_body;时间表:{时间戳[+间隔时间间隔)……|每时间间隔(开始时间戳[+间隔时间间隔)……][结束时间戳[+间隔时间间隔)……]}时间间隔:数量{年| |季度月| | | | |天小时分钟一周第二| YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
这条语句创建和安排一个新的事件。事件不会运行,除非事件调度器启用。检查事件调度器状态信息,使其在必要时,看到的部分25.4.2,“事件调度器配置”。
创建事件
要求事件
的特权模式创建的事件。如果定义者
条款存在,取决于所需的特权用户
值,如前所述25.6节,“存储对象访问控制”。
一个有效的最低要求创建事件
声明如下:
这是一个很小的例子创建事件
声明:
创建事件myevent如期CURRENT_TIMESTAMP + myschema间隔1小时做更新。mytable mycol = mycol + 1;
前面的sql语句创建一个事件命名myevent
。这个事件执行当一个小时后创造运行一个SQL语句,增量的值myschema.mytable
表的mycol
列1。
的event_name
必须是一个有效的MySQL标识符与最大长度为64个字符。事件名称不区分大小写的,所以你不能有两个事件命名myevent
和MyEvent
在相同的模式。一般来说,规则的事件名称相同的存储过程的名称。看到9.2节,“模式对象名称”。
一个事件与模式相关联。如果没有显示模式的一部分event_name
,默认的(当前)模式。创建一个事件在一个特定的模式,有资格的事件名称模式使用
语法。schema_name
。event_name
的定义者
子句指定了使用MySQL账户检查访问权限时事件执行时间。如果定义者
条款存在,用户
值应该是一个MySQL账户指定为”
,user_name
“@”host_name
”CURRENT_USER
,或CURRENT_USER ()
。允许用户
值取决于你的特权,如前所述25.6节,“存储对象访问控制”。还发现部分额外的信息安全事件。
如果定义者
子句省略,默认的定义者的用户执行创建事件
声明。这是一样的指定定义者= CURRENT_USER
明确。
在一个事件的身体,CURRENT_USER
函数返回账户用来检查特权事件执行时间,即定义者
用户。用户内部审计事件的信息,请参阅部分6.2.22,“基于sql的账户活动审计”。
如果不存在
有相同的含义创建事件
至于创建表
:如果一个事件命名event_name
已经存在相同的模式,不采取行动,没有错误的结果。(然而,在这种情况下生成一个警告。)
的按计划
条款确定的时候,多久,多长时间event_body
重复定义的事件。这一条款需要两种形式之一:
在
用于一次性的事件。它指定的事件只执行一次的日期和时间时间戳
时间戳
必须包括日期和时间,或必须是一个表达式解析为一个datetime值。你可以用一个值的DATETIME
或时间戳
为此类型。如果日期是过去,出现一个警告,如下所示:现在mysql > SELECT ();+ - - - - - - - - - - - - - - - - - - - - - - - -现在()+ | | + - - - - - - - - - - - - - - - - - - - - - - - - + | 2006-02-10 23:59:01 | + - - - - - - - - - - - - - - - - - - - - - - - - + 1行组(0.04秒)如期mysql >创建事件e_totals - >在“2006-02-10 23:59:00”- >做插入测试。现在总数值(());查询好,0行影响,1警告(0.00秒)mysql >显示警告\ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行* * * * * * * * * * * * * * * * * * * * * * * * * * *水平:注意代码:1588信息:过去事件执行时间和完成不保存设置。事件后立即被创造。
创建事件
语句本身就是病无论说理都失败了,一个错误。你可以用
CURRENT_TIMESTAMP
指定当前日期和时间。在这种情况下,事件行为一旦被创建。创建一个事件发生在将来的某个时候相对于当前日期和时间,所表达的短语”三个星期从现在开始”你可以使用可选条款
+时间间隔
。的时间间隔
时间间隔
部分由两部分组成,数量和单位时间,遵循所描述的语法规则时间间隔,除了你不能使用任何单位涉及微秒的关键字在定义一个事件。与一些间隔类型,可以使用复杂的时间单位。例如,”两分钟10秒”可以表示为+间隔2:10 MINUTE_SECOND
。你也可以把间隔。例如,
在CURRENT_TIMESTAMP +间隔3周+间隔2天
相当于”三个星期从现在开始的两天”。每个部分的条款必须开始+时间间隔
。定期进行重复操作,使用一个
每一个
条款。的每一个
关键字是一个紧随其后时间间隔
按照之前的讨论在
关键字。(+时间间隔
是不使用每一个
)。例如,每6周
意味着”每隔六周”。虽然
+时间间隔
条款是不允许的每一个
条款,您可以使用相同的允许在一个复杂的时间单位+时间间隔
。一个
每一个
条款可能包含一个可选的开始
条款。开始
紧随其后的是一个时间戳
值,指示行动应该开始重复时,也可以使用+时间间隔
指定一个时间”从现在开始”。例如,时间间隔
每3月开始CURRENT_TIMESTAMP +间隔1周
意味着”从现在开始,每三个月一个星期”。类似地,您可以表达”每两周,从现在开始6小时15分钟”作为每2周开始CURRENT_TIMESTAMP +间隔HOUR_MINUTE 6:15
。不指定开始
使用是一样的吗开始CURRENT_TIMESTAMP
,也就是指定的操作事件重复创建事件后立即开始。一个
每一个
条款可能包含一个可选的结束
条款。的结束
关键字之后时间戳
值告诉MySQL事件时应该停止循环。你也可以使用+时间间隔
与时间间隔
结束
;例如,每12小时开始CURRENT_TIMESTAMP +间隔30分钟结束CURRENT_TIMESTAMP +间隔4周
相当于”每12小时,三十分钟从现在开始,从现在开始和结束四个星期”。不使用结束
意味着事件继续执行下去。结束
支持复杂的时间单位相同的语法开始
所做的事。你可以用
开始
,结束
,两个,或没有每一个
条款。如果重复事件不终止在其调度间隔,结果可能是事件的多个实例同时执行。如果这是不可取的,你应该学会一种机制来防止同步实例。例如,您可以使用
GET_LOCK ()
函数,或行或表锁定。
的按计划
条款可以使用表达式包括内置MySQL函数和用户变量来获取的时间戳
或时间间隔
它包含值。你可能不会使用存储函数或可加载的函数在这样的表情,也不愿你使用任何表引用;然而,你可以使用选择双
。都是这样的情况创建事件
和改变事件
语句。引用存储功能,可加载的功能,特别不允许和表在这种情况下,失败和错误(见错误# 22830)。
次按计划
条款解释使用当前会话time_zone
价值。这成为事件的时区;即时区,用于事件调度和实际上是在它执行的事件。这些时间转换为UTC和存储以及内部事件的时区。这使得事件执行进行定义无论任何后续修改服务器的时区或夏令时的影响。额外的信息表示事件的时候,看到的部分25.4.4,“事件元数据”。另请参阅部分13.7.7.18,“显示事件声明”,部分26.3.14,“INFORMATION_SCHEMA事件表”。
通常情况下,一旦事件已经过期,就立即下降。你可以通过指定覆盖这一行为完成后保存
。使用完成后没有保存
只是明确了默认的非持久的行为。
您可以创建一个事件,但防止它活跃的使用禁用
关键字。或者,您可以使用启用
做出明确的默认状态,活跃。这是最有用的结合改变事件
(见13.1.3节,“改变事件声明”)。
第三个价值也可能出现在的地方启用
或禁用
;禁用在奴隶
被设置为一个事件在一个副本的状态表明,事件是在复制源服务器上创建和复制的副本,但不是在副本上执行。看到部分17.5.1.16,“复制调用功能”。
你可以提供一个评论事件使用评论
条款。评论
可以是任何64个字符的字符串,您希望使用来描述事件。评论文本,作为一个字符串,必须被引号包围。
的做
子句指定一个行动的事件,由一个SQL语句。几乎任何有效的MySQL声明可用于存储程序也可以被用作一个预定的行动声明事件。(见25.8节,“存储程序”限制)。例如,下面的事件e_hourly
删除所有的行会话
表每小时一次,这表的一部分site_activity
模式:
创建事件e_hourly按计划每1小时评论“清除会话表每小时。“从site_activity.sessions删除;
MySQL存储sql_mode
系统变量设置实际上事件时创建或改变,而且总是与该设置生效执行事件,无论当前服务器的SQL模式事件开始时执行。
一个创建事件
语句包含一个改变事件
声明的做
条款似乎成功;然而,当服务器试图执行生成的调度事件,执行失败的错误。
等语句选择
或显示
仅仅返回一个结果集在一个事件没有影响;这些不是的输出发送到MySQL监视器,也不是存储在任何地方。不过,您可以使用语句等选择……成
和插入……选择
那家商店。(见下面的例子在这一节中,后者的一个实例)。
一个事件所属模式是默认表引用的模式做
条款。任何其他模式中引用表必须用适当的模式名合格。
与存储程序一样,您可以使用复合语句的语法做
通过使用条款开始
和结束
关键字,如下所示:
分隔符|创建事件e_daily按计划每1天评论”保存的会话总数然后清除表每天的做插入site_activity开始。总数(时间、总)选择CURRENT_TIMESTAMP,从site_activity.sessions COUNT (*);从site_activity.sessions删除;结束|分隔符;
下面的例子使用了分隔符
命令修改语句分隔符。看到25.1节,“定义存储程序”。
更复杂的复合语句,比如用于存储程序,在一个事件是可能的。这个示例使用局部变量,一个错误处理程序,和流控制构造:
分隔符|创建事件e按计划每5秒开始宣布v整数;声明继续处理SQLEXCEPTION开始结束。设置v = 0;而v < 5做插入t1值(0);更新t2组s1 = s1 + 1;集合v = v + 1;结束时;结束|分隔符;
没有办法直接传递参数或事件;然而,它可以调用一个存储程序与参数在一个事件:
创建事件e_call_myproc如期CURRENT_TIMESTAMP +间隔1天叫myproc (27);
如果一个事件的定义者的特权足以设置全局系统变量(见部分5.1.9.1,“系统变量特权”),事件可以读和写全局变量。等授予特权意味着一个潜在的滥用,必须采取极端的保健。
一般来说,任何语句中有效的存储程序可以用于操作语句执行的事件。对语句允许在存储程序的更多信息,见部分25.2.1,“存储程序语法”。您可以创建一个事件作为一个存储程序的一部分,但事件不能创建另一个事件。