该 EVENTS 表提供了关于事件管理器事件的信息,这些事件在 第 27.4 节,“使用事件调度器” 中讨论。
该 EVENTS 表具有以下列:
-
EVENT_CATALOG事件所属的目录名称。该值始终为
def。 -
EVENT_SCHEMA事件所属的模式(数据库)名称。
-
EVENT_NAME事件名称。
-
DEFINER在
DEFINER子句中指定的账户名称(通常是创建事件的用户),以'格式。user_name'@'host_name' -
TIME_ZONE事件的时区,该时区用于调度事件并在事件执行时生效。默认值为
SYSTEM。 -
EVENT_BODY事件的语言,用于事件的
DO子句。该值始终为SQL。 -
EVENT_DEFINITION事件的 SQL 语句,用于事件的
DO子句。 -
EVENT_TYPE事件的重复类型,either
ONE TIME(瞬时)或RECURRING(重复)。 -
EXECUTE_AT对于瞬时事件,该值是事件的
DATETIME值,指定在AT子句中,或者是最后一个ALTER EVENT语句修改事件时的值。该值反映了事件的AT子句中的任何INTERVAL值的添加或减去。例如,如果事件使用ON SCHEDULE AT CURRENT_TIMESTAMP + '1:6' DAY_HOUR创建,并且事件是在 2018-02-09 14:05:30 创建的,那么该列中的值将是'2018-02-10 20:05:30'。如果事件的 timing 由EVERY子句而不是AT子句确定(即事件是重复的),那么该列中的值为NULL。 -
INTERVAL_VALUE对于重复事件,该值是事件之间的间隔数。对于瞬时事件,该值始终为
NULL。 -
INTERVAL_FIELD重复事件的时间单位,该值用于事件之间的间隔。对于瞬时事件,该值始终为
NULL。 -
SQL_MODE事件创建或修改时的 SQL 模式,该模式在事件执行时生效。有关允许的值,请参阅 第 7.1.11 节,“服务器 SQL 模式”。
-
STARTS重复事件的开始日期和时间,以
DATETIME值显示,该值为NULL如果事件没有定义开始日期和时间。对于瞬时事件,该列始终为NULL。对于重复事件,该值包含事件的DATETIME值,类似于EXECUTE_AT列。 -
ENDS对于一个具有
ENDS子句的重复事件,其定义包括该列中的相应DATETIME值。与EXECUTE_AT列一样,该值解析了用于表达式。如果事件定义中没有ENDS子句影响事件的时间,则该列为NULL。 -
STATUS事件状态。其中之一
ENABLED、DISABLED或REPLICA_SIDE_DISABLED(在 MySQL 8.2.0 之前,这是SLAVESIDE_DISABLED,现在已弃用)。REPLICA_SIDE_DISABLED表示事件的创建发生在另一个 MySQL 服务器上,该服务器充当复制源,并将事件复制到当前 MySQL 服务器,该服务器充当副本,但事件当前不在副本上执行。有关更多信息,请参阅 第 19.5.1.16 节,“复制 invoked 特征”。 -
ON_COMPLETION其中之一的两个值
PRESERVE或NOT PRESERVE。 -
CREATED事件创建的日期和时间。这是一个
TIMESTAMP值。 -
LAST_ALTERED事件最后修改的日期和时间。这是一个
TIMESTAMP值。如果事件自创建以来未被修改,则该值与CREATED值相同。 -
LAST_EXECUTED事件最后执行的日期和时间。这是一个
DATETIME值。如果事件从未执行,则该列为NULL。LAST_EXECUTED表示事件开始的时间。因此,ENDS列永远不会小于LAST_EXECUTED。 -
EVENT_COMMENT事件的注释文本,如果事件有注释。否则,该值为空。
-
ORIGINATOR事件创建的 MySQL 服务器的服务器 ID,在复制中使用该值可能会被
ALTER EVENT语句更新为执行该语句的服务器的服务器 ID,如果在复制源上执行。默认值为 0。 -
CHARACTER_SET_CLIENT事件创建时的会话值
character_set_client系统变量。 -
COLLATION_CONNECTION事件创建时的会话值
collation_connection系统变量。 -
DATABASE_COLLATION与事件关联的数据库的排序规则。
注意
-
EVENTS是一个非标准的INFORMATION_SCHEMA表。 -
在
EVENTS表中的时间使用事件时区、当前会话时区或 UTC,以 第 27.4.4 节,“事件元数据” 中所述。 -
有关
REPLICA_SIDE_DISABLED和ORIGINATOR列的更多信息,请参阅 第 19.5.1.16 节,“复制 invoked 特征”。
示例
假设用户 'jon'@'ghidora' 创建了一个名为 e_daily 的事件,然后使用 ALTER EVENT 语句对其进行了修改,如下所示:
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 (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END |
DELIMITER ;
ALTER EVENT e_daily
ENABLE;
(注意,注释可以跨多行。)
然后,该用户可以运行以下 SELECT 语句,并获得以下输出:
mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_NAME = 'e_daily'
AND EVENT_SCHEMA = 'myschema'\G
*************************** 1. row ***************************
EVENT_CATALOG: def
EVENT_SCHEMA: myschema
EVENT_NAME: e_daily
DEFINER: jon@ghidora
TIME_ZONE: SYSTEM
EVENT_BODY: SQL
EVENT_DEFINITION: BEGIN
INSERT INTO site_activity.totals (time, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 1
INTERVAL_FIELD: DAY
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_ENGINE_SUBSTITUTION
STARTS: 2018-08-08 11:06:34
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: NOT PRESERVE
CREATED: 2018-08-08 11:06:34
LAST_ALTERED: 2018-08-08 11:06:34
LAST_EXECUTED: 2018-08-08 16:06:34
EVENT_COMMENT: Saves total number of sessions then clears the
table each day
ORIGINATOR: 1
CHARACTER_SET_CLIENT: utf8mb4
COLLATION_CONNECTION: utf8mb4_0900_ai_ci
DATABASE_COLLATION: utf8mb4_0900_ai_ci
事件信息也可以从SHOW EVENTS语句中获得。见第15.7.7.19节,“SHOW EVENTS语句”。以下语句是等效的:
SELECT
EVENT_SCHEMA, EVENT_NAME, DEFINER, TIME_ZONE, EVENT_TYPE, EXECUTE_AT,
INTERVAL_VALUE, INTERVAL_FIELD, STARTS, ENDS, STATUS, ORIGINATOR,
CHARACTER_SET_CLIENT, COLLATION_CONNECTION, DATABASE_COLLATION
FROM INFORMATION_SCHEMA.EVENTS
WHERE table_schema = 'db_name'
[AND column_name LIKE 'wild']
SHOW EVENTS
[FROM db_name]
[LIKE 'wild']