直接查 information_schema.triggers 表可同时获取触发器定义和创建时间,但 mysql 5.7+ 才支持 created 字段,sql server 需联查 sys.objects 或 sys.triggers 并用 object_definition() 提取定义,且 create_date 随 alter 更新,非初始创建时间。

直接查 information_schema.triggers 表,就能同时拿到触发器定义和创建时间——这是跨 MySQL 和 SQL Server 的通用解法,但字段名和兼容性细节必须对得上。
MySQL 中查触发器定义和创建时间
MySQL 的 information_schema.triggers 表里有全部字段:TRIGGER_DEFINITION 存触发器 SQL 体,CREATED 字段就是精确到秒的创建时间(注意不是 CREATE_TIME,那是表的)。
- 查某个触发器:
SELECT TRIGGER_DEFINITION, CREATED FROM information_schema.triggers WHERE TRIGGER_NAME = 'your_trigger_name' AND TRIGGER_SCHEMA = 'your_db_name'; - 查当前库所有触发器及其创建时间:
SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING, CREATED, TRIGGER_DEFINITION FROM information_schema.triggers WHERE TRIGGER_SCHEMA = DATABASE(); -
CREATED字段在 MySQL 5.7+ 才可用;5.6 及更早版本该字段为空,只能靠SHOW CREATE TRIGGER看定义,但拿不到时间
SQL Server 中查触发器定义和创建时间
SQL Server 没有统一的 CREATED 字段,得从系统视图拼:定义用 OBJECT_DEFINITION(),创建时间得查 sys.objects 的 create_date。
- 查单个触发器定义和创建时间:
SELECT OBJECT_DEFINITION(OBJECT_ID('your_trigger_name')) AS definition, create_date FROM sys.objects WHERE name = 'your_trigger_name' AND type = 'TR'; - 查某张表的所有触发器:
SELECT t.name AS trigger_name, OBJECT_DEFINITION(t.object_id) AS definition, t.create_date FROM sys.triggers t JOIN sys.tables tbl ON t.parent_id = tbl.object_id WHERE tbl.name = 'your_table_name'; - 注意:SQL Server 的触发器名在数据库内全局唯一,但不带 schema 前缀可能查不到,建议用
schema_name.object_name全限定写法
别信 SHOW TRIGGERS 返回的时间字段
MySQL 的 SHOW TRIGGERS 输出里有个 Created 列,但它在大多数版本中恒为 NULL 或不可靠值,不能当真。它只是占位字段,实际不填充。真要时间,必须走 information_schema.triggers。
-
SHOW TRIGGERS适合快速扫一眼触发器名、事件类型、触发时机,但别指望它返回有效时间戳 - 某些旧版客户端(如 phpMyAdmin)界面显示的“创建时间”,其实是从
information_schema.triggers读的,但底层仍依赖CREATED字段是否可用
最易被忽略的是版本差异:MySQL 5.6 不提供 CREATED,SQL Server 的 create_date 是对象级而非触发器语句级——如果触发器被 ALTER 过,这个时间会更新,不代表最初创建时刻。











