mysql不记录触发器创建时间,information_schema.triggers中created字段在8.0中恒为null;获取定义须用show create trigger,查元数据可用select from information_schema.triggers,但action_statement可读性差。

SHOW TRIGGERS 返回的信息不含创建时间
直接执行 SHOW TRIGGERS 或 SHOW TRIGGERS \G 只能查到触发器名、事件类型(INSERT/UPDATE/DELETE)、触发时机(BEFORE/AFTER)、关联表、定义者、SQL模式等,但不包含创建时间。这是 MySQL 的设计限制,information_schema.TRIGGERS 表也未暴露 CREATED 字段(该字段在 MySQL 8.0 中仍为空或为 NULL)。
用 SELECT 查询 information_schema.TRIGGERS 获取完整元数据
真正能拿到触发器定义语句、作用表、触发时机、定义者、SQL安全上下文等结构化信息的,是查询系统表 information_schema.TRIGGERS:
SELECT TRIGGER_NAME, EVENT_MANIPULATION AS event, EVENT_OBJECT_TABLE AS table_name, ACTION_TIMING AS timing, DEFINER, ACTION_STATEMENT AS definition, CREATED FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'your_database_name';
注意以下几点:
-
CREATED字段在 MySQL 8.0 中始终为 NULL,不可依赖; -
ACTION_STATEMENT是触发器主体 SQL 的转义字符串(含换行和引号),可读性差,不适合直接复用; - 若需查看原始、可执行的建表语句,必须用
SHOW CREATE TRIGGER; - 该查询需有
SELECT权限访问information_schema,且对目标数据库有TRIGGER权限。
SHOW CREATE TRIGGER 是获取可移植定义语句的唯一可靠方式
要复制、迁移或审计触发器逻辑,必须用 SHOW CREATE TRIGGER。它返回带 DELIMITER 和完整语法的可执行语句:
SHOW CREATE TRIGGER trigupdate;
输出示例中会明确包含:
CREATE DEFINER=`user`@`host` TRIGGER ...BEFORE INSERT ON `account` FOR EACH ROW- 完整的
BEGIN ... END块(如果存在) - 注意:该命令不返回创建时间,也不支持 WHERE 过滤,只能逐个查
没有创建时间?那就靠间接手段定位
MySQL 本身不记录触发器创建时间,但你可以尝试以下路径还原时间线索:
- 检查 binlog:如果开启了
binlog_format = STATEMENT,且触发器创建语句被记录,可用mysqlbinlog搜索CREATE TRIGGER并看事件时间戳; - 查数据库备份/部署脚本:触发器通常随 schema 初始化脚本一起上线,Git 提交时间或发布记录就是最接近的“创建时间”;
- 审计日志插件(如 MySQL Enterprise Audit 或社区版
audit_log):若已启用,可查CREATE TRIGGER对应的 audit 记录时间; -
SELECT * FROM performance_schema.events_statements_history_long:仅在开启相关 consumers 且语句尚未过期时可能残留,不可靠,不建议依赖。
真正落地时,别把“查创建时间”当刚需——触发器逻辑本身是否正确、是否与当前业务一致,远比它哪天建的更重要。而定义语句,永远以 SHOW CREATE TRIGGER 为准。











