MySQL查看触发器
查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。
SHOW TRIGGERS语句查看触发器信息
在 MySQL 中,可以通过 SHOW TRIGGERS 语句来查看触发器的基本信息,语法格式如下:
SHOW TRIGGERS;
示例 1
首先创建一个数据表 account,表中有两个字段,分别是 INT 类型的 accnum 和 DECIMAL 类型的 amount。SQL 语句和运行结果如下:
mysql> CREATE TABLE account( -> accnum INT(4), -> amount DECIMAL(10,2)); Query OK, 0 rows affected (0.49 sec)
创建一个名为 trigupdate 的触发器,每次 account 表更新数据之后都向 myevent 数据表中插入一条数据。创建数据表 myevent 的 SQL 语句和运行结果如下:
mysql> CREATE TABLE myevent( -> id INT(11) DEFAULT NULL, -> evtname CHAR(20) DEFAULT NULL); Query OK, 0 rows affected (0.26 sec)
创建 trigupdate 触发器的 SQL 代码如下:
mysql> CREATE TRIGGER trigupdate AFTER UPDATE ON account -> FOR EACH ROW INSERT INTO myevent VALUES(1,'after update'); Query OK, 0 rows affected (0.15 sec)
使用 SHOW TRIGGERS 语句查看触发器(在 SHOW TRIGGERS 命令后添加\G
,这样显示信息会比较有条理),SQL 语句和运行结果如下:
mysql> SHOW TRIGGERS \G *************************** 1. row *************************** Trigger: trigupdate Event: UPDATE Table: account Statement: INSERT INTO myevent VALUES(1,'after update') Timing: AFTER Created: 2020-02-24 14:07:15.08 sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost character_set_client: gbk collation_connection: gbk_chinese_ci Database Collation: latin1_swedish_ci 1 row in set (0.09 sec)
由运行结果可以看到触发器的基本信息。对以上显示信息的说明如下:
- Trigger 表示触发器的名称,在这里触发器的名称为 trigupdate;
- Event 表示激活触发器的事件,这里的触发事件为更新操作 UPDATE;
- Table 表示激活触发器的操作对象表,这里为 account 表;
- Statement 表示触发器执行的操作,这里是向 myevent 数据表中插入一条数据;
- Timing 表示触发器触发的时间,这里为更新操作之后(AFTER);
- 还有一些其他信息,比如触发器的创建时间、SQL 的模式、触发器的定义账户和字符集等,这里不再一一介绍。
SHOW TRIGGERS 语句用来查看当前创建的所有触发器的信息。因为该语句无法查询指定的触发器,所以在触发器较少的情况下,使用该语句会很方便。如果要查看特定触发器的信息或者数据库中触发器较多时,可以直接从 information_schema 数据库中的 triggers 数据表中查找。
在triggers表中查看触发器信息
在 MySQL 中,所有触发器的信息都存在 information_schema 数据库的 triggers 表中,可以通过查询命令 SELECT 来查看,具体的语法如下:
SELECT * FROM information_schema.triggers WHERE trigger_name= '触发器名';
其中,'触发器名'
用来指定要查看的触发器的名称,需要用单引号引起来。这种方式可以查询指定的触发器,使用起来更加方便、灵活。
示例 2
下面使用 SELECT 命令查看 trigupdate 触发器,SQL 语句如下:
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G
上述命令通过 WHERE 来指定需要查看的触发器的名称,运行结果如下:
mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G *************************** 1. row *************************** TRIGGER_CATALOG: def TRIGGER_SCHEMA: test TRIGGER_NAME: trigupdate EVENT_MANIPULATION: UPDATE EVENT_OBJECT_CATALOG: def EVENT_OBJECT_SCHEMA: test EVENT_OBJECT_TABLE: account ACTION_ORDER: 1 ACTION_CONDITION: NULL ACTION_STATEMENT: INSERT INTO myevent VALUES(1,'after update') ACTION_ORIENTATION: ROW ACTION_TIMING: AFTER ACTION_REFERENCE_OLD_TABLE: NULL ACTION_REFERENCE_NEW_TABLE: NULL ACTION_REFERENCE_OLD_ROW: OLD ACTION_REFERENCE_NEW_ROW: NEW CREATED: 2020-02-24 16:07:15.08 SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION DEFINER: root@localhost CHARACTER_SET_CLIENT: gbk COLLATION_CONNECTION: gbk_chinese_ci DATABASE_COLLATION: latin1_swedish_ci 1 row in set (0.22 sec)
由运行结果可以看到触发器的详细信息。对以上显示信息的说明如下:
- TRIGGER_SCHEMA 表示触发器所在的数据库;
- TRIGGER_NAME 表示触发器的名称;
- EVENT_OBJECT_TABLE 表示在哪个数据表上触发;
- ACTION_STATEMENT 表示触发器触发的时候执行的具体操作;
- ACTION_ORIENTATION 的值为 ROW,表示在每条记录上都触发;
- ACTION_TIMING 表示触发的时刻是 AFTER;
- 还有一些其他信息,比如触发器的创建时间、SQL 的模式、触发器的定义账户和字符集等,这里不再一一介绍。
上述 SQL 语句也可以不指定触发器名称,这样将查看所有的触发器,SQL 语句如下:
SELECT * FROM information_schema.triggers \G
这个语句会显示 triggers 数据表中所有的触发器信息。
相关文章
- Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
- Mysql:is not allowed to connect to this MySQL server
- MySQL · 最佳实践 · RDS 只读实例延迟分析
- php分享(三十六)mysql中关联表更新
- 前后端项目部署-6, flask+Gunicorn+gevent+supervisor+nginx+redis+mysql+mongodb+vue,docker-compose部署
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 使用mysql-connector-python操作MYSQL数据库
- 【问题解决方案】MySQL安装后无法启动-net start mysql服务名无效
- Mysql 的InnoDB事务方面的 多版本并发控制如何实现 MVCC
- [转]2006 MySQL server has gone away错误,最大值溢出解决办法 mysql max_allowed_packet 查询和修改
- 〖Python 数据库开发实战 - MySQL篇㉚〗- MySQL 条件函数
- 实践案例丨Pt-osc工具连接rds for mysql 数据库失败
- python mysql插入数据遇到的错误
- MySQL Study之--Mysql无法启动“mysql.host”
- 查看MySQL锁等待的原因
- MySQL之自带四库之mysql库
- MySql高级----Linux下的mysql的安装与初始化配置
- MYSQL数据库篇之查看当前数据库的版本编号
- 【MySQL优化查询】MySQL单表过亿条数据,如何优化查询速度?
- Mysql proxy实现读写分离
- 两个MySQL数据库之间同步表结构及索引模式
- 【Mysql异构实时同步Oracle】OGG12异构同步mysql到oracle(windows mysql实时同步数据到linux oracle)详细文档
- MySQL 忘记密码解决方法