-
Notifications
You must be signed in to change notification settings - Fork 111
TRIGGERS
xiaoboluo768 edited this page Jun 7, 2020
·
2 revisions
- 该表提供查询关于某个数据库下的触发器相关的信息,要查询某个表的触发器,查询的账户必须要有trigger权限
- 该表为InnoDB引擎临时表
- 表定义语句
CREATE TEMPORARY TABLE `TRIGGERS` (
`TRIGGER_CATALOG` varchar(512) NOT NULL DEFAULT '',
`TRIGGER_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TRIGGER_NAME` varchar(64) NOT NULL DEFAULT '',
`EVENT_MANIPULATION` varchar(6) NOT NULL DEFAULT '',
`EVENT_OBJECT_CATALOG` varchar(512) NOT NULL DEFAULT '',
`EVENT_OBJECT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`EVENT_OBJECT_TABLE` varchar(64) NOT NULL DEFAULT '',
`ACTION_ORDER` bigint(4) NOT NULL DEFAULT '0',
`ACTION_CONDITION` longtext,
`ACTION_STATEMENT` longtext NOT NULL,
`ACTION_ORIENTATION` varchar(9) NOT NULL DEFAULT '',
`ACTION_TIMING` varchar(6) NOT NULL DEFAULT '',
`ACTION_REFERENCE_OLD_TABLE` varchar(64) DEFAULT NULL,
`ACTION_REFERENCE_NEW_TABLE` varchar(64) DEFAULT NULL,
`ACTION_REFERENCE_OLD_ROW` varchar(3) NOT NULL DEFAULT '',
`ACTION_REFERENCE_NEW_ROW` varchar(3) NOT NULL DEFAULT '',
`CREATED` datetime(2) DEFAULT NULL,
`SQL_MODE` varchar(8192) NOT NULL DEFAULT '',
`DEFINER` varchar(93) NOT NULL DEFAULT '',
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL DEFAULT '',
`COLLATION_CONNECTION` varchar(32) NOT NULL DEFAULT '',
`DATABASE_COLLATION` varchar(32) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 表字段含义
- TRIGGER_SCHEMA和TRIGGER_NAME:表示触发器所属的数据库名称和触发器名称
- EVENT_MANIPULATION:表示触发器触发事件在关联表上的操作类型,有效值为:“INSERT”(表示插入了一行数据)、“DELETE”(表示一行被删除)、“UPDATE”(表示一行被修改)
- EVENT_OBJECT_SCHEMA和EVENT_OBJECT_TABLE:每个触发器只与一个表相关联。这两个字段表示触发器关联的表所在的数据库名称和触发器关联的表名
- ACTION_ORDER:表示具有相同的EVENT_MANIPULATION和ACTION_TIMING列值触发器在同一个表上的触发顺序。在MySQL 5.7.2之前,ACTION_ORDER列值总是为0,因为在这之前的版本中,具有相同的EVENT_MANIPULATION和ACTION_TIMING值的触发器一个表只能有一个。
- ACTION_STATEMENT:表示触发器SQL语句主体,也就是触发器激活时需要执行的语句。本文使用UTF-8编码。
- ACTION_ORIENTATION:始终为"ROW"
- ACTION_TIMING:表示触发器是之前还是之后激活。有效值为:'BEFORE' 或 'AFTER'
- ACTION_REFERENCE_OLD_ROW和ACTION_REFERENCE_NEW_ROW:分别表示旧的和新的列标识符。ACTION_REFERENCE_OLD_ROW列值总是为“OLD”,ACTION_REFERENCE_NEW_ROW列值总是为“NEW”
- CREATED:表示创建触发器的时间。在MySQL 5.7.2或更高版本中创建的触发器时,该字段是一个TIMESTAMP(2)类型值(小数部分保留2位数,即百分之一秒),在5.7.2之前创建的触发器该字段为NULL
- SQL_MODE:表示创建触发器时会话的sql_mode值(该字段为 "MySQL extension" 列)
- DEFINER:创建触发器的账户名称(该字段为 "MySQL extension" 列)
- CHARACTER_SET_CLIENT:表示创建触发器时character_set_client系统变量的会话值(该字段为 "MySQL extension" 列)
- COLLATION_CONNECTION:表示创建触发器时collation_connection系统变量的会话值(该字段为 "MySQL extension" 列)
- DATABASE_COLLATION:表示创建触发器时与触发器关联的数据库的排序规则(该字段为 "MySQL extension" 列)
- ACTION_CONDITION、ACTION_REFERENCE_OLD_TABLE和ACTION_REFERENCE_NEW_TABLE:这些列的值目前始终为NULL
- 表记录内容示例
# 创建触发器
root@localhost : (none) 12:02:38> use sbtest
Database changed
root@localhost : sbtest 12:18:08> CREATE TRIGGER test_trigger BEFORE UPDATE ON sbtest1 FOR EACH ROW SET @sum = @sum + NEW.id;
Query OK, 0 rows affected (0.10 sec)
# 查询TRIGGERS表
root@localhost : sbtest 12:20:15> select * from information_schema.triggers where TRIGGER_SCHEMA='sbtest'\G;
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: sbtest
TRIGGER_NAME: test_trigger
EVENT_MANIPULATION: UPDATE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: sbtest
EVENT_OBJECT_TABLE: sbtest1
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: SET @sum = @sum + NEW.id
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2018-01-31 00:19:10.82
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@%
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_bin
1 row in set (0.00 sec)
- PS:该表中的信息还可以使用show语句查询(但show语句可查询的信息非常有限)
root@localhost : sbtest 12:23:26> show triggers from sbtest where `Table`='sbtest1'\G;
*************************** 1. row ***************************
Trigger: test_trigger
Event: UPDATE
Table: sbtest1
Statement: SET @sum = @sum + NEW.id
Timing: BEFORE
Created: 2018-01-31 00:19:10.82
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: root@%
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_bin
1 row in set (0.00 sec)
上一篇:TABLE_PRIVILEGES表 |下一篇:USER_PRIVILEGES表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!