在java开发中,与数据库打交道是家常便饭。JDBC技术、基于JDBC封装的工具类库、基于JDBC封装的框架是目前java操作数据库的几种主要方式。比较常见的基于JDBC封装的工具类库有:
mysql中,information_schema是一个信息库,用于存放关于mysql服务器所维护的所有其他数据库的元数据信息,如数据库名、数据表名、列名(数据表中的)、访问权限等。
information_schema数据库中,包括了如图2所示的元数据信息表。
下面,对该数据库中常用的元数据信息表进行介绍。
该表提供了当前mysql实例中所有数据库的信息。如图3所示。show databases的结果取之此表。
该表提供了关于数据库中的表(包括视图)的信息。详细记录了数据库中某个表属于哪个数据库(SCHEMA),表的名字,表的类型(基本表、视图),表的引擎,版本、行的格式、表的行数、平均行长度、数据长度、索引长度、创建时间、更新时间、校验和、表创建选项、创建表注释等信息。如图4所示。show tables from schemaname的结果取之此表。
该表提供了数据库的表中的列信息。详细记录了某张表的所有列以及每个列的信息,具体包括:某一个列所在数据库、所在表、列名、是否可空、数据类型、最大字符长度、数值精度、字符编码、列类型,等。如图5所示。show columns from schemaname.tablename的结果取之此表。
该表提供了关于表索引的信息,具体包括:索引的表的数据库名、表名、索引名、列名、索引类型、注释,等。如图6所示。是show index from schemaname.tablename的结果取之此表。
该表给出了关于用户权限的相关信息,具体包括:被授权者(角色)、授权类型、是否可传递授权等。如图7所示。该信息源自mysql.user授权表。是非标准表。
该表给出了关于数据库权限的信息,具体包括:被授权角色、数据库名字、授权类型、是否可传递授权。如图8所示。该信息来自mysql.db授权表。是非标准表。
该表给出了关于表权限的信息,具体包括:被授权角色、数据库名、表名、权限类型、是否可被传递授权。如图9所示。该信息源自mysql.tables_priv授权表。是非标准表。
该表给出了关于列权限的信息,具体包括:被授权角色、数据库、表名、列名、授权类型、是否可被传递授权。如图10所示。该信息源自mysql.columns_priv授权表。是非标准表。
该表提供了mysql实例可用字符集的信息,具体包括:字符集名字、默认校核对照名字、描述、最大长度。如图11所示。是SHOW CHARACTER SET结果集取之此表。
该表提供了关于各字符集的对照信息,具体包括:校核名字、字符编码名字、是否默认值等。如图12所示。
该表指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。如图13所示。
该表描述了存在约束的表。以及表的约束类型。具体包括:约束的数据库、约束名、表名、约束类型等。如图14所示。
该表描述了具有约束的键列。具体包括:约束所在数据库、约束名、表名、列名、在唯一约束里面的位置、引用的数据库名、引用的表名、引用的列名等。如图15所示。
该表提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。具体包括:子程序所在数据库、子程序类型、数据类型、字符最大长度、数字精度、字符编码名字、字符校核名字、子程序体类型、子程序定义文本、安全类型、创建时间、最后更改时间、sql语句模式、子程序备注、子程序定义角色等。如图16所示。
该表给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。具体包括:所在数据库、表名、视图定义文本、核查选项、是否可更新、视图定义角色、安全类型、字符集、校核字符集等。如图17所示。
该表提供了关于触发程序的信息。必须有super权限才能查看该表。具体包括:触发器所在数据库、触发器名字、触发条件、触发器内容、创建时间、sql模式、创建角色等。如图18所示。
该数据库中其他的信息表,在此不再描述。
(1) MYSQL中information_schema简介
(2) MySQL默认数据库之 information_schema库