该数据库存放了数据库的各种元数据,如数据库名、表名、列数据类型、访问权限等。
1 该数据库使用的注意事项
Information_schema是每个MySQL示例的内置数据库,它存放了MySQL中所有数据库的信息。该库中的表是只读的,其本质上是视图而不是真正的数据表,所以无法对其设置触发器,更不能对其使用INSERT、UPDATE、DELETE等语句。
2 字符集
对于该库中的字符类型列默认为VARCHAR类型,官方介绍最小长度为64,但是实际上也有比该长度短的,该类型的默认字符集使用utf8,使用utf8_general_ci进行校验。如下图所示:
3 SHOW语句
一些SHOW语句的结果本质上是使用SELECT从该数据库的表中查询数据,但是使用SELECT有以下优势:因为所有的访问都是基于数据表进行,所以其更符合Codd规则;对于该数据库的表结构会更加熟悉,可以对结果集进行自定义如过滤、排序、组装、装换等,使结果数据更加容易使用;
4 相关权限
MySQL的每一个用户都有访问该数据库中表的权限,但是只能获取对应其权限的数据行。
5 相关性能
在information_schema数据库中查看多个数据库的信息可能会引起性能问题,遇到这种情况需要考虑通过SQL优化等来提高性能。
6 标准化
MySQL中information_sheme表结构设计遵循ANSI/ISO:2003的Schemata标准规范,与SQL:2003的F021特性最为接近。
总结
本文介绍了MySQL的默认库information_schema的基本作用,其中包含了对应MySQL中每个数据库的基本元数据信息,如数据库属性、数据表属性、列属性等。
大部分与元数据信息相关的SHOW语句几乎都来自于对information_schema中表数据的查询,但是了解该库中数据表之间的关系,使用自定义的SELECT语句进行信息查询不仅能使数据集更加符合实际应用,而且能启发我们对数据库进行一定的优化。
需要注意的时虽然该数据库对于所有的MySQL用户都是有访问权限的,但是其表中的数据也是有权限控制的,比如数据库实例上有test1、test2、test3三个库,MySQL的用户test用户只有方位test1用户的权限,那么该用户只能查询information_schema中test1有关的信息。
后续将对information_schemma数据库中的各个表进行详细的分析。