10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.5 mb
PDF (A4)- 41.6 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册摘录

13.1.13创建事件的声明

创建[定义者=用户)事件(如果不存在)event_name按计划时间表(在完成[不]保存][启用禁用| |禁用在奴隶][评论”字符串']做event_body;时间表:{时间戳[+间隔时间间隔)……|每时间间隔(开始时间戳[+间隔时间间隔)……][结束时间戳[+间隔时间间隔)……]}时间间隔:数量{年| |季度月| | | | |天小时分钟一周第二| YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

这条语句创建和安排一个新的事件。事件不会运行,除非事件调度器启用。检查事件调度器状态信息,使其在必要时,看到的部分25.4.2,“事件调度器配置”

创建事件要求事件的特权模式创建的事件。如果定义者条款存在,取决于所需的特权用户值,如前所述25.6节,“存储对象访问控制”

一个有效的最低要求创建事件声明如下:

  • 关键字创建事件加一个事件名称,唯一地标识事件在一个数据库模式。

  • 一个按计划条款,这决定了事件的时间和多长时间执行。

  • 一个条款,其中包含要执行的SQL语句的一个事件。

这是一个很小的例子创建事件声明:

创建事件myevent如期CURRENT_TIMESTAMP + myschema间隔1小时做更新。mytable mycol = mycol + 1;

前面的sql语句创建一个事件命名myevent。这个事件执行当一个小时后创造运行一个SQL语句,增量的值myschema.mytable表的mycol列1。

event_name必须是一个有效的MySQL标识符与最大长度为64个字符。事件名称不区分大小写的,所以你不能有两个事件命名myeventMyEvent在相同的模式。一般来说,规则的事件名称相同的存储过程的名称。看到9.2节,“模式对象名称”

一个事件与模式相关联。如果没有显示模式的一部分event_name,默认的(当前)模式。创建一个事件在一个特定的模式,有资格的事件名称模式使用schema_nameevent_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,“存储程序语法”。您可以创建一个事件作为一个存储程序的一部分,但事件不能创建另一个事件。