MySQL事件(ZZ)

CREATE EVENT

CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    DO sql_statement;

schedule:
    AT timestamp [+ INTERVAL interval]
  | EVERY interval [STARTS timestamp] [ENDS timestamp]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

关键字evnet name一旦创建,它在当前的计划中唯一的标识一个事件调度
 ON SCHEDULE: 决定事件什么时候,如何的调度
DO:包含时间要执行的sql语句。
如 :
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;
表示:

event name:myevent
一个小时后被执行一次-----myschema.mytable表的mycol 列的值增长1
event name 最大长度64个字符,如果没有指定,那就是当前的mysql用户名,他不区分大小写
比如在同一个数据库的计划中你不能有myevent and MyEvent这样来那2个event name

IF NOT EXISTS : 如果已经存在相同的event name,则不进行任何操作,也不产生任何错误结果,只是产生一

个警告
ON SCHEDULE :确定何时、多久、多长时间一次重复执行sql_statement定义的语句
     AT timestamp :用于一次性事件。他指定在一个具体的时间执行一次,包括日期和时间(DATETIME or

TIMESTAMP 类型的),timestamp 必须是将来的时间,你不能用一个过去的时间,如:
   mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2006-02-10 23:59:01 |
+---------------------+
1 row in set (0.04 sec)

mysql> CREATE EVENT e_totals
    ->     ON SCHEDULE AT '2006-02-10 23:59:00'
    ->     DO INSERT INTO test.totals VALUES (NOW());
ERROR 1522 (HY000): Activation (AT) time is in the past

 如果用CURRENT_TIMESTAMP,则一创建就执行
创造一个事件,发生在将来的某个时间日期和时间,如“从现在开始3个星期后”

你可以使用选项“+ INTERVAL interval”,interval 由数量和时间的单位2部分组成,间隔的距离用“

DATE_ADD() ”函数来支配,单位的关键字也是相同,除了您不能使用微秒的任何单位。

你也可以结合时间间隔。比如:“AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY ”,表示

从现在起3个星期零2天,这选项的的每个部分必须以“+ INTERVAL”开始。

在一段时间间隔内将常性的重复的起作用。你可以使用一个“EVERY ”选项,“EVERY ”关键字,“+

INTERVAL 关键字时不用every”, 比如“EVERY 6 WEEK”表示每6周,“every”关键字后+interval。
在一个简单的every字句中不能用every关键字和+ INTERVAL 关键字联合起来,比如你可以用EVERY '2:10'

MINUTE_SECOND.表示“every two minutes and ten seconds”

EVERY 选项也可以包含STARTS选项,当一个动作开始重复时用STARTS timestamp ,也可以用"+ INTERVAL "关

键字,interval 表示一个从现在开始的时间,比如: EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK 表

示从现在开始一个星期后,每3个月,同样的,EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + '6:15'

HOUR_MINUTE表示从现在开始6:15后每2个星期,不指定STARTS则表示STARTS CURRENT_TIMESTAMP ,为时间指定

的操作从现在开始执行

every和end两个选项.timestamp值后是ends,他告诉mysql停止执行.你也可以用ends+ INTERVAL interval ,
比如EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP +

INTERVAL 4 WEEK 表示从现在起开始三十分钟后开始每十二个小时执行一次,从现在起四个星期后结束.不用

ends关键字表示事件持续到不确定什么时候结束地执行.
在every子句中STARTS, ENDS你可以两个都用,也可以都不用.

ON SCHEDULE 子句表示创建mysql函数和包含timestamp 或者interval 值的用户变量.在这样的表达式中你不

能用存储程序或者用户自定义的函数,也不能用任何参照表,无论如何,你可以用SELECT FROM DUAL,他要用

CREATE EVENT 和ALTER EVENT 声明,从MySQL 5.1.13开始,参照存储程序,用户自定义函数,表中明确不接受
通常,一旦一个event已经到期,它会立刻结束,你可以用 ON COMPLETION PRESERVE覆盖他,用ON COMPLETION

NOT PRESERVE 仅仅明确使缺省行为不再持续执行
你也可以用 DISABLE 关键字创建一个停止行为执行的事件,或者用ENABLE关键字这个行为称为默认的状态
他们经常用在ALTER EVENT 子句中
用COMMENT给一个事件一个注释,用任何64个字符来描述这个事件

DO子句由sql语句组成,你可以用任何有效的sql语句,存储程序,甚至是一个计划执行的event,比如下面的

e_hourly 事件表示每一个小时删除sessions表中的所有行一次,是site_activity 这个计划任务的一部分
CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;

当mysql存储系统变量 sql_mode 设置被创建和执行事件的设置生效
这个设置生效就经常执行,不管当前服务器的sql mode

SHOW 和select 即你今年返回一个没有起作用的结果
do子句可以用begin和end来包含多个sql 语句,如:
DELIMITER |

CREATE EVENT e_daily
    ON SCHEDULE
      EVERY 1 DAY
    COMMENT 'Saves total number of sessions then clears the table each day.'
    DO
      BEGIN
        INSERT INTO site_activity.totals (when, total)
          SELECT CURRENT_TIMESTAMP, COUNT(*)
            FROM site_activity.sessions;
        DELETE FROM site_activity.sessions;
      END |

DELIMITER 表示改变声明的分隔符
有的用在存储程序和event中的as,如:用一个本地变量,一个错误的handler,一个流控制的创造
DELIMITER |

CREATE EVENT e
    ON SCHEDULE
      EVERY 5 SECOND
    DO
      BEGIN
        DECLARE v INTEGER;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;

        SET v = 0;

        WHILE v < 5 DO
          INSERT INTO t1 VALUES (0);
          UPDATE t2 SET s1 = s1 + 1;
          SET v = v + 1;
        END WHILE;
    END |

DELIMITER ;
没有方法直接用event传递参数,但是仍然可以用参数调用存储程序.如:
CREATE EVENT e_call_myproc
    ON SCHEDULE
      AT CURRENT_TIMESTAMP + 1 DAY
    DO CALL myproc(5, 27);

如果event的定义者拥有SUPER 特权,这个event即拥有读写全局变量的权限,因为授予这种特权会有潜在的危

险,慎重之!CREATE EVENT

CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    DO sql_statement;

schedule:
    AT timestamp [+ INTERVAL interval]
  | EVERY interval [STARTS timestamp] [ENDS timestamp]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

关键字evnet name一旦创建,它在当前的计划中唯一的标识一个事件调度
 ON SCHEDULE: 决定事件什么时候,如何的调度
DO:包含时间要执行的sql语句。
如 :
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      UPDATE myschema.mytable SET mycol = mycol + 1;
表示:

event name:myevent
一个小时后被执行一次-----myschema.mytable表的mycol 列的值增长1
event name 最大长度64个字符,如果没有指定,那就是当前的mysql用户名,他不区分大小写
比如在同一个数据库的计划中你不能有myevent and MyEvent这样来那2个event name

IF NOT EXISTS : 如果已经存在相同的event name,则不进行任何操作,也不产生任何错误结果,只是产生一

个警告
ON SCHEDULE :确定何时、多久、多长时间一次重复执行sql_statement定义的语句
     AT timestamp :用于一次性事件。他指定在一个具体的时间执行一次,包括日期和时间(DATETIME or

TIMESTAMP 类型的),timestamp 必须是将来的时间,你不能用一个过去的时间,如:
   mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2006-02-10 23:59:01 |
+---------------------+
1 row in set (0.04 sec)

mysql> CREATE EVENT e_totals
    ->     ON SCHEDULE AT '2006-02-10 23:59:00'
    ->     DO INSERT INTO test.totals VALUES (NOW());
ERROR 1522 (HY000): Activation (AT) time is in the past

 如果用CURRENT_TIMESTAMP,则一创建就执行
创造一个事件,发生在将来的某个时间日期和时间,如“从现在开始3个星期后”

你可以使用选项“+ INTERVAL interval”,interval 由数量和时间的单位2部分组成,间隔的距离用“

DATE_ADD() ”函数来支配,单位的关键字也是相同,除了您不能使用微秒的任何单位。

你也可以结合时间间隔。比如:“AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY ”,表示

从现在起3个星期零2天,这选项的的每个部分必须以“+ INTERVAL”开始。

在一段时间间隔内将常性的重复的起作用。你可以使用一个“EVERY ”选项,“EVERY ”关键字,“+

INTERVAL 关键字时不用every”, 比如“EVERY 6 WEEK”表示每6周,“every”关键字后+interval。
在一个简单的every字句中不能用every关键字和+ INTERVAL 关键字联合起来,比如你可以用EVERY '2:10'

MINUTE_SECOND.表示“every two minutes and ten seconds”

EVERY 选项也可以包含STARTS选项,当一个动作开始重复时用STARTS timestamp ,也可以用"+ INTERVAL "关

键字,interval 表示一个从现在开始的时间,比如: EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK 表

示从现在开始一个星期后,每3个月,同样的,EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + '6:15'

HOUR_MINUTE表示从现在开始6:15后每2个星期,不指定STARTS则表示STARTS CURRENT_TIMESTAMP ,为时间指定

的操作从现在开始执行

every和end两个选项.timestamp值后是ends,他告诉mysql停止执行.你也可以用ends+ INTERVAL interval ,
比如EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP +

INTERVAL 4 WEEK 表示从现在起开始三十分钟后开始每十二个小时执行一次,从现在起四个星期后结束.不用

ends关键字表示事件持续到不确定什么时候结束地执行.
在every子句中STARTS, ENDS你可以两个都用,也可以都不用.

ON SCHEDULE 子句表示创建mysql函数和包含timestamp 或者interval 值的用户变量.在这样的表达式中你不

能用存储程序或者用户自定义的函数,也不能用任何参照表,无论如何,你可以用SELECT FROM DUAL,他要用

CREATE EVENT 和ALTER EVENT 声明,从MySQL 5.1.13开始,参照存储程序,用户自定义函数,表中明确不接受
通常,一旦一个event已经到期,它会立刻结束,你可以用 ON COMPLETION PRESERVE覆盖他,用ON COMPLETION

NOT PRESERVE 仅仅明确使缺省行为不再持续执行
你也可以用 DISABLE 关键字创建一个停止行为执行的事件,或者用ENABLE关键字这个行为称为默认的状态
他们经常用在ALTER EVENT 子句中
用COMMENT给一个事件一个注释,用任何64个字符来描述这个事件

DO子句由sql语句组成,你可以用任何有效的sql语句,存储程序,甚至是一个计划执行的event,比如下面的

e_hourly 事件表示每一个小时删除sessions表中的所有行一次,是site_activity 这个计划任务的一部分
CREATE EVENT e_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM site_activity.sessions;

当mysql存储系统变量 sql_mode 设置被创建和执行事件的设置生效
这个设置生效就经常执行,不管当前服务器的sql mode

SHOW 和select 即你今年返回一个没有起作用的结果
do子句可以用begin和end来包含多个sql 语句,如:
DELIMITER |

CREATE EVENT e_daily
    ON SCHEDULE
      EVERY 1 DAY
    COMMENT 'Saves total number of sessions then clears the table each day.'
    DO
      BEGIN
        INSERT INTO site_activity.totals (when, total)
          SELECT CURRENT_TIMESTAMP, COUNT(*)
            FROM site_activity.sessions;
        DELETE FROM site_activity.sessions;
      END |

DELIMITER 表示改变声明的分隔符
有的用在存储程序和event中的as,如:用一个本地变量,一个错误的handler,一个流控制的创造
DELIMITER |

CREATE EVENT e
    ON SCHEDULE
      EVERY 5 SECOND
    DO
      BEGIN
        DECLARE v INTEGER;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;

        SET v = 0;

        WHILE v < 5 DO
          INSERT INTO t1 VALUES (0);
          UPDATE t2 SET s1 = s1 + 1;
          SET v = v + 1;
        END WHILE;
    END |

DELIMITER ;
没有方法直接用event传递参数,但是仍然可以用参数调用存储程序.如:
CREATE EVENT e_call_myproc
    ON SCHEDULE
      AT CURRENT_TIMESTAMP + 1 DAY
    DO CALL myproc(5, 27);

如果event的定义者拥有SUPER 特权,这个event即拥有读写全局变量的权限,因为授予这种特权会有潜在的危

险,慎重之!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Mac上安装MySQL,可以按照以下步骤进行操作: 1. 首先,打开终端并编辑bash配置文件。可以使用vi编辑器打开文件~/.bash_profile。在文件中添加以下语句:PATH=$PATH:/usr/local/mysql/bin。保存文件并关闭。 2. 接下来,进入vim编辑环境。在终端中输入vim命令,然后按下i键进入插入模式。输入以下两行代码: export PATH=$PATH:/usr/local/mysql/bin export PATH=$PATH:/usr/local/mysql/support-files 保存文件并退出vim编辑器。 3. 然后,启动MySQL服务。在终端中输入以下命令并输入电脑密码(不是数据库登录密码): sudo mysql.server start 4. 如果需要停止MySQL服务,可以使用以下命令: sudo mysql.server stop 5. 如果需要重启MySQL服务,可以使用以下命令: sudo mysql.server restart 6. 若要查看MySQL服务的状态,可以使用以下命令: sudo mysql.server status 这样,你就可以在Mac上成功安装和配置MySQL了。 #### 引用[.reference_title] - *1* [Mac 上如何安装Mysql?(超完整,小白专用)](https://blog.csdn.net/weixin_44427181/article/details/127552892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MAC MySql 安装(详细步骤)](https://blog.csdn.net/zz00008888/article/details/109091478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值