一、SHOW TRIGGERS 语句

基本语法:

SHOW TRIGGERS;

常用选项:

 查看指定数据库的触发器
SHOW TRIGGERS FROM database_name;

 

 查看指定模式的触发器(模糊匹配)

SHOW TRIGGERS LIKE 'pattern';

 

 查看指定数据库和模式的触发器

SHOW TRIGGERS FROM database_name LIKE 'pattern';

 

 使用\G格式化输出(在命令行中)

SHOW TRIGGERS\G

 

示例:查看所有触发器

SHOW TRIGGERS\G

输出结果解析:

属性说明
Triggertrigupdate触发器名称
EventUPDATE触发事件 (INSERT/UPDATE/DELETE)
Tableaccount关联的表名
StatementINSERT INTO myevent VALUES(1,'after update')触发器主体
TimingAFTER触发时机 (BEFORE/AFTER)
Created2020-02-24 14:07:15.08创建时间
sql_modeSTRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONSQL模式设置
Definerroot@localhost创建者
character_set_clientgbk客户端字符集
collation_connectiongbk_chinese_ci连接字符集
Database Collationlatin1_swedish_ci数据库字符集


优点:

 语法简单,易于使用

 显示信息格式友好

 适合快速查看所有触发器

缺点:

 无法筛选特定触发器

 信息相对简略

 不适合在程序中使用

 

二、查询 information_schema.triggers 表

基本语法:

SELECT * FROM information_schema.triggers 
WHERE condition;

常用查询示例:

1. 查看特定触发器

SELECT * FROM information_schema.triggers 
WHERE TRIGGER_NAME = 'trigupdate'\G

2. 查看特定数据库的触发器

SELECT * FROM information_schema.triggers 
WHERE TRIGGER_SCHEMA = 'test'\G

3. 查看特定表的触发器

SELECT * FROM information_schema.triggers 
WHERE EVENT_OBJECT_TABLE = 'account'\G

4. 查看特定类型的触发器

 查看所有AFTER UPDATE触发器

SELECT * FROM information_schema.triggers 
WHERE ACTION_TIMING = 'AFTER' AND EVENT_MANIPULATION = 'UPDATE'\G

输出结果解析:

        

属性说明
TRIGGER_CATALOGdef触发器目录(通常为def)
TRIGGER_SCHEMAtest触发器所在数据库
TRIGGER_NAMEtrigupdate触发器名称
EVENT_MANIPULATIONUPDATE触发事件
EVENT_OBJECT_TABLEaccount关联的表名
ACTION_STATEMENTINSERT INTO myevent VALUES(1,'after update')触发器SQL语句
ACTION_ORIENTATIONROW行级触发
ACTION_TIMINGAFTER触发时机
ACTION_REFERENCE_OLD_ROWOLDOLD伪表引用名
ACTION_REFERENCE_NEW_ROWNEWNEW伪表引用名
CREATED2020-02-24 16:07:15.08创建时间
SQL_MODESTRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONSQL模式设置
DEFINERroot@localhost创建者账号
CHARACTER_SET_CLIENTgbk客户端字符集
COLLATION_CONNECTIONgbk_chinese_ci连接字符集
DATABASE_COLLATIONlatin1_swedish_ci数据库字符集


重要字段说明:

 `TRIGGER_SCHEMA`: 触发器所在的数据库

 `EVENT_MANIPULATION`: 触发事件类型

 `ACTION_TIMING`: 触发时机

 `ACTION_STATEMENT`: 触发器执行的SQL语句

 `ACTION_ORIENTATION`: 触发粒度(总是ROW)

 `ACTION_REFERENCE_OLD_ROW`: OLD伪表的引用名

 `ACTION_REFERENCE_NEW_ROW`: NEW伪表的引用名

 

三、实用查询示例

1. 查看触发器的完整定义

SELECT 
    TRIGGER_NAME,
    EVENT_OBJECT_TABLE,
    ACTION_TIMING,
    EVENT_MANIPULATION,
    ACTION_STATEMENT,
    CREATED,
    DEFINER
FROM information_schema.triggers 
WHERE TRIGGER_SCHEMA = 'your_database';


2. 查找特定表的触发器

SELECT 
    TRIGGER_NAME,
    ACTION_TIMING,
    EVENT_MANIPULATION,
    ACTION_STATEMENT
FROM information_schema.triggers 
WHERE EVENT_OBJECT_TABLE = 'account'
ORDER BY ACTION_TIMING, EVENT_MANIPULATION;

3. 查看触发器的依赖关系

SELECT 
    TRIGGER_NAME,
    EVENT_OBJECT_TABLE as '表名',
    ACTION_STATEMENT as '触发操作'
FROM information_schema.triggers 
WHERE ACTION_STATEMENT LIKE '%INSERT INTO%' 
   OR ACTION_STATEMENT LIKE '%UPDATE%' 
   OR ACTION_STATEMENT LIKE '%DELETE FROM%';

4. 获取触发器的创建语句

SELECT 
    CONCAT(
        'CREATE TRIGGER ', TRIGGER_NAME, ' ',
        ACTION_TIMING, ' ', EVENT_MANIPULATION, ' ',
        'ON ', EVENT_OBJECT_TABLE, ' ',
        'FOR EACH ROW ', ACTION_STATEMENT
    ) AS create_statement
FROM information_schema.triggers 
WHERE TRIGGER_NAME = 'trigupdate';

 

四、使用 SHOW CREATE TRIGGER

查看触发器的完整创建语句:

SHOW CREATE TRIGGER trigger_name;

示例:

SHOW CREATE TRIGGER trigupdate;

输出结果:

 Trigger    sql_mode                SQL Original Statement                                          

 trigupdate STRICT_TRANS_TABLES,... CREATE DEFINER=`root`@`localhost` TRIGGER trigupdate AFTER UPDATE...

 

五、可视化工具中的查看方式

在 MySQL Workbench、phpMyAdmin 等可视化工具中,通常可以通过以下方式查看触发器:

1. 选择数据库

2. 选择相关数据表

3. 查看"Triggers"选项卡

4. 可以看到该表的所有触发器列表

 

六、最佳实践和建议

1. 文档化:维护触发器的文档记录,包括用途和业务逻辑

2. 命名规范:使用一致的命名约定,如 `trg_[表名]_[时机]_[事件]`

3. 定期审查:定期检查触发器,确保它们仍然需要且性能良好

4. 权限管理:限制触发器的创建权限,避免过多的触发器影响性能

5. 测试环境:在生产环境修改前,在测试环境充分测试

 

七、注意事项

1. 权限要求:查看触发器需要相应的权限

2. 性能影响:频繁查询 `information_schema` 可能影响性能

3. 版本差异:不同 MySQL 版本的 `information_schema.triggers` 表结构可能略有不同

4. 字符集:注意字符集设置,避免显示乱码

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)