mysql中,information_schema初探

1. 问题描述

在java开发中,与数据库打交道是家常便饭。JDBC技术、基于JDBC封装的工具类库、基于JDBC封装的框架是目前java操作数据库的几种主要方式。比较常见的基于JDBC封装的工具类库有:

  • Apache组织提供的Commons DbUtils,使用它能够简化JDBC应用程序的开发,并且,与原生的JDBC操作在性能上相差无异。
  • Spring框架中提供的SpringJDBC,该工具类库封装了基础的JDBC操作,我们在使用时,不用去关注获取驱动、建立连接、关闭连接等非业务操作,可以更加专注于业务逻辑的实现。
  • 源于Apache组织的一个开源项目iBaits,2010年迁移到google code,并且改名为MyBatis。MyBitis是一个持久层的框架。它支持定制SQL、存储过程和高级映射 ;同时,避免了几乎所有的JDBC代码、手动设置参数和获取结果集的重复性工作。
    那么,在熟悉这些工具类库和框架基本的使用之后,可能会关注工具类库和框架的高级特性,在必要时,对相关功能进行扩展。当然,扩展之前,需要阅读相关工具类库和框架的源码,有助于对编码风格和底层实现有所了解,方便扩展的时候,借鉴之用。
    而在此之前,探索数据库中的一些元数据信息,将有助于后续相关工具类库和框架的源码的阅读。
    下面将对mysql中,information_schema信息库进行探索。如图1所示,为DG客户端显示的mysql服务器中包括的基本数据库,其中,information_schema已用红框标识。
    在这里插入图片描述
图1 mysql中包括的基本数据库

2. information_schema初探

mysql中,information_schema是一个信息库,用于存放关于mysql服务器所维护的所有其他数据库的元数据信息,如数据库名、数据表名、列名(数据表中的)、访问权限等。
information_schema数据库中,包括了如图2所示的元数据信息表。
在这里插入图片描述

图2 information_schema数据库中,包括的元数据信息表

下面,对该数据库中常用的元数据信息表进行介绍。

2.1 SCHEMATA表

该表提供了当前mysql实例中所有数据库的信息。如图3所示。show databases的结果取之此表。
在这里插入图片描述

图3 SCHEMATA存储的详细信息图

2.2 TABLES表

该表提供了关于数据库中的表(包括视图)的信息。详细记录了数据库中某个表属于哪个数据库(SCHEMA),表的名字,表的类型(基本表、视图),表的引擎,版本、行的格式、表的行数、平均行长度、数据长度、索引长度、创建时间、更新时间、校验和、表创建选项、创建表注释等信息。如图4所示。show tables from schemaname的结果取之此表。
在这里插入图片描述

图4 TABLES表中,存储的相关信息

2.3 COLUMNS表

该表提供了数据库的表中的列信息。详细记录了某张表的所有列以及每个列的信息,具体包括:某一个列所在数据库、所在表、列名、是否可空、数据类型、最大字符长度、数值精度、字符编码、列类型,等。如图5所示。show columns from schemaname.tablename的结果取之此表。
在这里插入图片描述

图5 COLUMNS表中,存储的相关信息

2.4 STATISTICS表

该表提供了关于表索引的信息,具体包括:索引的表的数据库名、表名、索引名、列名、索引类型、注释,等。如图6所示。是show index from schemaname.tablename的结果取之此表。
在这里插入图片描述

图6 STATISTICS表中,存储的相关信息

2.5 USER_PRIVILEGES表

该表给出了关于用户权限的相关信息,具体包括:被授权者(角色)、授权类型、是否可传递授权等。如图7所示。该信息源自mysql.user授权表。是非标准表。
在这里插入图片描述

图7 USER_PRIVILEGES表中,存储的相关信息

2.6 SCHEMA_PRIVILEGES表

该表给出了关于数据库权限的信息,具体包括:被授权角色、数据库名字、授权类型、是否可传递授权。如图8所示。该信息来自mysql.db授权表。是非标准表。
在这里插入图片描述

图8 SCHEMA_PRIVILEGES表中,存储的相关信息

2.7 TABLE_PRIVILEGES表

该表给出了关于表权限的信息,具体包括:被授权角色、数据库名、表名、权限类型、是否可被传递授权。如图9所示。该信息源自mysql.tables_priv授权表。是非标准表。
在这里插入图片描述

图9 TABLE_PRIVILEGES表中,存储的相关信息

2.8 COLUMN_PRIVILEGES表

该表给出了关于列权限的信息,具体包括:被授权角色、数据库、表名、列名、授权类型、是否可被传递授权。如图10所示。该信息源自mysql.columns_priv授权表。是非标准表。
在这里插入图片描述

图10 COLUMN_PRIVILEGES表中,存储的相关信息

2.9 CHARACTER_SETS表

该表提供了mysql实例可用字符集的信息,具体包括:字符集名字、默认校核对照名字、描述、最大长度。如图11所示。是SHOW CHARACTER SET结果集取之此表。
在这里插入图片描述

图11 CHARACTER_SETS表中,存储的相关信息

2.10 COLLATIONS表

该表提供了关于各字符集的对照信息,具体包括:校核名字、字符编码名字、是否默认值等。如图12所示。
在这里插入图片描述

图12 COLLATIONS表中,存储的相关信息

2.11 COLLATION_CHARACTER_SET_APPLICABILITY

该表指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。如图13所示。
在这里插入图片描述

图13 COLLATION_CHARACTER_SET_APPLICABILITY表中,存储的相关信息

2.12 TABLE_CONSTRAINTS表

该表描述了存在约束的表。以及表的约束类型。具体包括:约束的数据库、约束名、表名、约束类型等。如图14所示。
在这里插入图片描述

图14 TABLE_CONSTRAINTS表中,存储的相关信息

2.13 KEY_COLUMN_USAGE表

该表描述了具有约束的键列。具体包括:约束所在数据库、约束名、表名、列名、在唯一约束里面的位置、引用的数据库名、引用的表名、引用的列名等。如图15所示。
在这里插入图片描述

图15 KEY_COLUMN_USAGE表中,存储的相关信息

2.14 ROUTINES表

该表提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。具体包括:子程序所在数据库、子程序类型、数据类型、字符最大长度、数字精度、字符编码名字、字符校核名字、子程序体类型、子程序定义文本、安全类型、创建时间、最后更改时间、sql语句模式、子程序备注、子程序定义角色等。如图16所示。
在这里插入图片描述

图16 ROUTINES表中,存储的相关信息

2.15 VIEWS表

该表给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。具体包括:所在数据库、表名、视图定义文本、核查选项、是否可更新、视图定义角色、安全类型、字符集、校核字符集等。如图17所示。
在这里插入图片描述

图17 VIEWS表中,存储的相关信息

2.16 TRIGGERS表

该表提供了关于触发程序的信息。必须有super权限才能查看该表。具体包括:触发器所在数据库、触发器名字、触发条件、触发器内容、创建时间、sql模式、创建角色等。如图18所示。
在这里插入图片描述

图18 TRIGGERS表中,存储的相关信息

2.17 information_schema中其他的元数据表

该数据库中其他的信息表,在此不再描述。

3. 参考资源

(1) MYSQL中information_schema简介
(2) MySQL默认数据库之 information_schema库

猜你喜欢

转载自blog.csdn.net/fanjianglin/article/details/109143545