java技术--MySQL事件语法关键字详解

1.MySQL从5.1开始支持event功能

(1)有了这个功能之后,只需要设定好执行时间,执行事件
(2)执行事件一般是要执行的sql语句或者封装好的复杂的存储过程
(3)通常,事件名称的规则与存储例程的名称相同

2.创建事件语法 :

(1)CREATE EVENT关键字
CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;
schedule:
    AT timestamp [+ INTERVAL interval] ...| EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
    
(2)最小CREATE EVENT声明示例:
   <1>关键字CREATE EVENT加上一个事件名称,它唯一标识数据库模式中的事件
   <2>ON SCHEDULE子句,用于确定事件执行的时间和频率
   <3>DO子句,其中包含要由事件执行的SQL语句或者复杂的存储过程
        CREATE EVENT  event_name
            ON SCHEDULE schedule
        DO event_body;

3.修改事件语法:

(1) ALTER关键字
(2)语法类型和创建语法一样

4.删除事件:

 DROP EVENT [IF EXISTS] event_name

5.事件语法关键字解释;

(1)CREATE EVENT需要 EVENT 特权才能创建事件,可能还需要 SET_USER_ID或 SUPER特权,具体取决于 DEFINER 值
    <1>DEFINER子句指定在事件执行时检查访问特权时要使用的MySQL帐户
    <2>DEFINER的默认值是执行CREATE EVENT语句的用户,这与明确指定DEFINER = CURRENT_USER相同
(2)IF NOT EXISTS:
    <1>对于CREATE EVENT具有与CREATE TABLE相同的含义
    <2>如果名称为event_name的事件已存在于同一模式中,则不采取任何操作,并且不会产生错误
(3)ON SCHEDULE schedule:本条款采取两种形式之一(AT和STARTS)
    ON SCHEDULE子句schedule确定event_body为事件定义的 时间, 频率 和 时长    
    <1>AT timestamp用于一次性事件
          1.1.指定事件只在指定的日期和时间执行一次 timestamp为指定的日期和时间
          1.2.一般使用时可以使用当前时间加上延后的一段时间(这种条款的每一部分必须以+ INTERVAL开头)
            AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR//当前时间开始1小时后执行
          1.3.AT后面也可以加固定的时间
    <2>EVERY子句:定期重复操作
          2.1.关键字AT timestamp + INTERVAL并不适用于周期性事件,对于周期性事件使用关键字EVERY
            例如:EVERY 6 WEEK是指“ 每六周 ”重复执行一次
          2.2.EVERY子句中不允许使用+ INTERVAL子句,但可以使用+ INTERVAL中允许的相同复杂时间单位
          2.3.EVERY子句可以包含一个可选的STARTS子句
            2.3.1.STARTS后跟一个时间戳值,指何时应该开始重复动作
            2.3.2.还可以使用+ INTERVAL间隔来指定“从现在开始”的时间量
           例如:EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK //每三个月,从现在起一周后开始
            2.3.3.不指定STARTS与使用STARTS CURRENT_TIMESTAMP相同:即事件指定的操作在创建事件时立即开始重复
    <3>EVERY子句可以包含一个可选的ENDS子句
          3.1.ENDS关键字后跟一个时间戳值,告诉MySQL事件应该何时停止重复
          3.2.不使用ENDS意味着事件无限期地继续执行   
(4)ON COMPLETION [NOT] PRESERVE:假如在定义event的时候有指定ENDS子句
    <1>on completion preserve 的时候,当event到期了,event会被禁用(disable),但是该event还是会存在  
    <2>on completion not preserve的时候,当event到期的时候,该event会被自动删除掉  
(5)[ENABLE | DISABLE | DISABLE ON SLAVE]<1>使用ENABLE关键字开启事件为活动状态
    <2>使用DISABLE关键字阻止事件为活动状态
    <3>DISABLE ON SLAVE被设置为复制从站上事件的状态,以指示事件在主站上创建并复制到从站,但不在从站上执行
(6)[COMMENT 'string']<1>使用COMMENT子句为事件提供注释
    <2>注释最多为64个字符,注释文本是一个字符串文字,必须用引号括起来        
(7)DO event_body:
    <1>DO子句指定事件执行的动作,并由SQL语句或者调用封装好的存储过程组成     
    <2>几乎任何可以在存储例程中使用的有效MySQL语句也可以用作预定事件的操作语句        
发布了143 篇原创文章 · 获赞 10 · 访问量 7541

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/103762308
今日推荐