在上一篇《Server层统计信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的列、约束等统计信息字典表,本期我们将为大家带来系列第三篇《Server层表级别对象字典表 | 全方位认识information_schema》。
1、VIEWS
该表提供查询数据库中的视图相关的信息,查询该表的帐号需要拥有show view权限
- 该表为InnoDB引擎临时表
下面是该表中存储的信息内容
admin@localhost : information_schema 06:22:17> select * from VIEWS where TABLE_SCHEMA='sys' limit 1\G;
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: sys
TABLE_NAME: host_summary
VIEW_DEFINITION: select if(isnull(`performance_schema`.`accounts`.`HOST`),'background',`performance_schema`.`accounts`.`HOST`) AS `host`,sum(`stmt`.`total`) AS \
...... # 视图定义文本内容过长,后续内容省略
CHECK_OPTION: NONE
IS_UPDATABLE: NO
DEFINER: mysql.sys@localhost
SECURITY_TYPE: INVOKER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
1 row in set (0.02 sec)
字段含义如下:
- TABLE_CATALOG:该字段总是为def
- TABLE_SCHEMA:表示视图所在的数据库名称
- TABLE_NAME:表示视图名称
- VIEW_DEFINITION:表示视图的定义语句SQL文本,注意,该文本经过了内部转换,并不是原始的定义语句,该列显示的内容与使用SHOW CREATE VIEW语句查看到的视图定义语句信息大部分相同(小部分不同的是,information_schema.views表中会自动去掉例如"WITH CHECK OPTION"的关键字,而show create view语句查询出来的信息中不会删除"WITH CHECK OPTION"关键字)
- CHECK_OPTION:创建视图时的CHECK OPTION选项值,有效值为:NONE、CASCADED、LOCAL
- IS_UPDATABLE:在创建视图时,MySQL会为视图设置一个是否可更新的标记,如果视图可执行DML语句(以及类似的操作),则该字段值为YES,否则为NO。
-
* 如果视图不可被更新,则执行DML语句时会报错
* 如果视图依赖于一个或多个其他视图,则IS_UPDATABLE标记在此场景下不可靠,在这种情况下,被依赖的基础视图中的某一个被更新,IS_UPDATABLE列的值并不会更新,但可以通过删除和重新创建视图来更新该值 - DEFINER:创建视图的账户名称
- SECURITY_TYPE:表示视图以谁的身份来执行,有效值为:DEFINER(表示以定义者的身份来执行)、INVOKER(表示调用者的身份来执行)
- CHARACTER_SET_CLIENT:表示创建视图时character_set_client系统变量的会话值
- COLLATION_CONNECTION:创建视图时collation_connection系统变量的会话值
PS:MySQL可以使用不同的sql_mode的设置值来使server支持不同的SQL语法类型。例如:当使用"ANSI"值时,双竖杠"||" 被当作连接运算符(字符串拼接符)解析。在MySQL内部会把双竖杠"||" 转换为concat()函数对待,但在MySQL 5.7的默认sql_mode值下,双竖杠"||" 被解析为逻辑或关键字or。
2、TRIGGERS
该表提供查询关于某个数据库下的触发器相关的信息,要查询某个表的触发器,查询的账户必须要有trigger权限
- 该表为InnoDB引擎临时表
下面是该表中存储的信息内容
# 创建触发器
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)
字段含义如下:
- TRIGGER_CATALOG:该字段总是为def
- TRIGGER_SCHEMA和TRIGGER_NAME:表示触发器所属的数据库名称和触发器名称
- EVENT_MANIPULATION:表示触发器触发事件在关联表上的操作类型,有效值为:“INSERT”(表示插入了一行数据)、“DELETE”(表示一行被删除)、“UPDATE”(表示一行被修改)
- EVENT_OBJECT_CATALOG:该字段总是为def
- EVENT_OBJECT_SCHEMA和EVENT_OBJECT_TABLE:每个触发器只与一个表相关联。这两个字段表示触发器关联的表所在的数据库名称和触发器关联的表名
- ACTION_ORDER:表示具有相同的EVENT_MANIPULATION和ACTION_TIMING列值触发器在同一个表上的触发顺序。在MySQL 5.7.2之前,ACTION_ORDER列值总是为0,因为在这之前的版本中,具有相同的EVENT_MANIPULATION和ACTION_TIMING值的触发器一个表只能有一个。
- ACTION_CONDITION:该字段总是为NULL
- ACTION_STATEMENT:表示触发器SQL语句主体,也就是触发器激活时需要执行的语句。本文使用UTF-8编码。
- ACTION_ORIENTATION:始终为"ROW"
- ACTION_TIMING:表示触发器是之前还是之后激活。有效值为:'BEFORE' 或 'AFTER'
- ACTION_REFERENCE_OLD_TABLE和ACTION_REFERENCE_NEW_TABLE:这两个字段总是为NULL
- 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系统变量的会话值(该字段