### 13.1.3 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.html)语句更改现有事件的一个或多个特征，而无需删除并重新创建它。每个的语法`定义者`,`按照时间表`,`在完成的时候`,`评论`,`使能够`/`禁用`， 和[`做`](do.html)子句与使用时完全相同[`创建事件`](create-event.html).（看[第 13.1.13 节，“CREATE EVENT 语句”](create-event.html).)

任何用户都可以更改在该用户拥有的数据库上定义的事件[`事件`](privileges-provided.html#priv_event)特权。当用户执行成功[`改变事件`](alter-event.html)声明，该用户成为受影响事件的定义者。

[`改变事件`](alter-event.html)仅适用于现有事件：

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

在以下每个示例中，假设名为`我的事件`定义如下：

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

以下语句更改了时间表`我的事件`从每六小时一次立即开始到每十二小时一次，从语句运行后四个小时开始：

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

可以在单个语句中更改事件的多个特征。这个例子改变了执行的 SQL 语句`我的事件`删除所有记录`我的表`;它还会更改事件的时间表，使其在此之后的一天执行一次[`改变事件`](alter-event.html)语句运行。

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

指定一个选项[`改变事件`](alter-event.html)仅针对您要更改的那些特征进行声明；省略的选项保留其现有值。这包括任何默认值[`创建事件`](create-event.html)如`使能够`.

禁用`我的事件`， 用这个[`改变事件`](alter-event.html)陈述：

```
ALTER EVENT myevent
    DISABLE;
```

这`按照时间表`子句可以使用涉及内置 MySQL 函数和用户变量的表达式来获取任何*`时间戳`*要么*`间隔`*它包含的值。您不能在此类表达式中使用存储例程或可加载函数，也不能使用任何表引用；但是，您可以使用`从双重选择`.这对双方都是正确的[`改变事件`](alter-event.html)和[`创建事件`](create-event.html)陈述。在这种情况下，特别不允许引用存储的例程、可加载函数和表，并且会因错误而失败（请参阅错误 #22830）。

虽然一个[`改变事件`](alter-event.html)包含另一个的语句[`改变事件`](alter-event.html)在其声明[`做`](do.html)子句似乎成功，当服务器尝试执行生成的计划事件时，执行失败并出现错误。

要重命名事件，请使用[`改变事件`](alter-event.html)声明的`重命名为`条款。此语句重命名事件`我的事件`到`你的事件`：

```
ALTER EVENT myevent
    RENAME TO yourevent;
```

您还可以使用将事件移动到不同的数据库`改变事件...重命名为...`和`*`db_name.event_name`*`符号，如下所示：

```
ALTER EVENT olddb.myevent
    RENAME TO newdb.myevent;
```

要执行前面的语句，执行它的用户必须拥有[`事件`](privileges-provided.html#priv_event)对双方的特权`旧数据库`和`新数据库`数据库。

笔记

没有`重命名事件`陈述。

价值`禁用从属`用于副本而不是`使能够`要么`禁用`指示在复制源服务器上创建并复制到副本但不在副本上执行的事件。一般，`禁用从属`根据需要自动设置；但是，在某些情况下，您可能希望或需要手动更改它。看[第 17.5.1.16 节，“调用功能的复制”](replication-features-invoked.html)， 了解更多信息。
