• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ALTER EVENT语句

    ALTER
        [DEFINER = user]
        EVENT event_name
        [ON SCHEDULE schedule]
        [ON COMPLETION [NOT] PRESERVE]
        [RENAME TO new_event_name]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'string']
        [DO event_body]
    

    ALTER EVENT语句可以更改现有事件的一个或多个特征,而无需删除并重新创建它。对于每个的语法DEFINERON SCHEDULEON COMPLETIONCOMMENTENABLE/DISABLE,和DO条款是完全一样的当用于如CREATE EVENT。(请参见“ CREATE EVENT语句”。)

    任何用户都可以更改在该用户具有EVENT特权的数据库上定义的事件。当用户执行成功的ALTER EVENT语句时,该用户将成为受影响事件的定义者。

    ALTER EVENT仅适用于现有事件:

    mysql> ALTER EVENT no_such_event 
    >     ON SCHEDULE 
    >       EVERY '2:3' DAY_HOUR;
    ERROR 1517 (HY000): Unknown event 'no_such_event'
    

    在以下每个示例中,假定myevent已定义命名事件,如下所示:

    CREATE EVENT myevent
        ON SCHEDULE
          EVERY 6 HOUR
        COMMENT 'A sample comment.'
        DO
          UPDATE myschema.mytable SET mycol = mycol + 1;
    

    以下语句将计划myevent从立即运行开始的每六个小时一次更改为立即运行的四个小时,开始每十二小时更改一次:

    ALTER EVENT myevent
        ON SCHEDULE
          EVERY 12 HOUR
        STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
    

    可以在单个语句中更改事件的多个特征。本示例将执行的SQL语句更改为myevent从其中删除所有记录的语句mytable。它还会更改事件的计划,以使其在ALTER EVENT运行该语句后的一天执行一次。

    ALTER EVENT myevent
        ON SCHEDULE
          AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
        DO
          TRUNCATE TABLE myschema.mytable;
    

    ALTER EVENT仅在语句中为要更改的特征指定选项。省略的选项保留其现有值。这包括任何默认值CREATE EVENT,例如ENABLE

    要禁用myevent,请使用以下ALTER EVENT语句:

    ALTER EVENT myevent
        DISABLE;
    

    ON SCHEDULE子句可以使用涉及内置MySQL函数和用户变量的表达式来获取其包含的timestampinterval值。您不能在此类表达式中使用存储的例程或用户定义的函数,也不能使用任何表引用。但是,您可以使用SELECT FROM DUAL。对于ALTER EVENTCREATE EVENT语句都是如此。在这种情况下,明确不允许引用存储的例程,用户定义的函数和表,并且它们会因错误而失败(请参见Bug#22830)。

    尽管在其子句ALTER EVENT中包含另一个ALTER EVENT语句的DO语句似乎成功,但是当服务器尝试执行生成的计划事件时,执行失败并显示错误。

    要重命名事件,请使用ALTER EVENT语句的RENAME TO子句。该语句将事件重命名myeventyourevent

    ALTER EVENT myevent
        RENAME TO yourevent;
    

    您还可以使用ALTER EVENT ... RENAME TO ...db_name.event_name标记将事件移动到其他数据库,如下所示:

    ALTER EVENT olddb.myevent
        RENAME TO newdb.myevent;
    

    要执行前一条语句,执行该语句的用户必须EVENT同时具有olddbnewdb数据库的特权。

    注意

    没有RENAME EVENT声明。

    DISABLE ON SLAVE在复制从属服务器上使用该值代替ENABLEDISABLE指示在主服务器上创建并复制到从属服务器但未在从属服务器上执行的事件。通常,DISABLE ON SLAVE根据需要自动设置;但是,在某些情况下,您可能需要或需要手动更改它。有关更多信息,请参见“复制功能”。