java 获取数据库元_获取数据库元数据
MySQL 包含几种途径以便获取关于数据库及其各种对象(即元数据)的信息,请问您是否了解这些方法?
1、SHOW语句,如SHOW TABLES等等。
2、INFORMATION_SCHEMA数据库里的数据表。
3、命令行程序,如mysqlshow或者是mysqldump。
一、用SHOW语句获取
显示该服务器管理的所有数据库;并获取指定数据库db_name的创建脚本。
列出默认数据库里的所有数据表。 SHOW TABLES;
列出给定数据库里的所有数据表。 SHOW TABLES FROM db_name;
查看给定数据表的创建语句。 SHOW CREATE TABLE tbl_name;
获取指定数据表中的字段列表及其索引信息。SELECT\*,\,Indexes\$FROM\,tbl_name\$LIMIT\,1000此命令与DESC命令的输出结果相同。列出指定数据表中的索引信息。
例如,在某些编程语言中,SHOW语句还可以带有LIKE 'pattern'子串,并用于将SHOW语句的结果限定在特定范围内,并且支持使用通配符。
二、从INFORMATION_SCHEMA数据库获取元数据
可将其视为一个虚拟化的数据库系统。
该系统中的数据表则包含基于不同数据库元素构建的视图。
该系统中包含以下数据表项:
mysql> display tables within the information_schema database;+---------------------------------------+| Tables_in_information_schema |+---------------------------------------+| CHARACTER_SETS || COLLATIONS || COLLATION_CHARACTER_SET_APPLICABILITY || COLUMNS || COLUMN_PRIVILEGES || ENGINES || EVENTS || FILES || GLOBAL_STATUS || GLOBAL_VARIABLES || KEY_COLUMN_USAGE || PARTITIONS || PLUGINS || PROCESSLIST || PROFILING || REFERENTIAL_CONSTRAINTS || ROUTINES || SCHEMATA || SCHEMA_PRIVILEGES || SESSION_STATUS || SESSION_VARIABLES || STATISTICS || TABLES ||=|| TABLE_CONSTRAINTS ||=|| TABLE_PRIVILEGES ||=|| TRIGGERS ||=|| USER_PRIVILEGES ||=|| VIEWS |+---------------------------------------+Total rows retrieved: 28 within 0.01 seconds
分别对这些列简单的说明。
诸如SCHEME、TABLE、VIEW等技术指标也被用来描述数据库中的信息:数据库表、数据表、视图(View)、存储过程(Stored Procedure)、触发器(Trigger)、数据库中的事件机制(Event)、数据分区策略(Partitioning Strategy)以及具体的数据列配置信息(Column Configuration Details)。以数据表为例,则指的就是表格结构中包含的具体列字段及其属性设置情况。
mysql> show columns from INFORMATION_SCHEMA.COLUMNS;+--------------------------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+--------------------------+---------------------+------+-----+---------+-------+| TABLE_CATALOG | varchar(512) | YES | | NULL | | | TABLE_SCHEMA | varchar(64) | NO | | | | | TABLE_NAME | varchar(64) | NO | | | | | COLUMN_NAME | varchar(64) | NO | | | | | ORDINAL_POSITION | bigint(21) unsigned | NO | | 0 | | | COLUMN_DEFAULT | longtext | YES | | NULL | | | IS_NULLABLE | varchar(3) | NO | | | | | DATA_TYPE | varchar(64) | NO | | | | | CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES | | NULL | | | CHARACTER_OCTET_LENGTH | bigint(21) unsigned | YES | | NULL | | | NUMERIC_PRECISION | bigint(21) unsigned | YES | | NULL | | | NUMERIC_SCALE | bigint(21) unsigned | YES | | NULL | | | CHARACTER_SET_NAME | varchar(32) | YES | | NULL | | | COLLATION_NAME | varchar(32) | YES | | NULL | | | COLUMN_TYPE | longtext | NO | | NULL | | | COLUMN_KEY | varchar(3) | NO | | | | | EXTRA | varchar(27) | NO | | | | | PRIVILEGES | varchar(80) | NO | | | | | COLUMN_COMMENT | varchar(255) | NO | | | | +--------------------------+---------------------+------+-----+---------+-------|
这是我查看一些数据表的记录
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA != 'information_schema' and TABLE_SCHEMA!='mysql'\G;*************************** 1. row *************************** TABLE_CATALOG: NULL TABLE_SCHEMA: db_info TABLE_NAME: i_node TABLE_TYPE: BASE TABLE ENGINE: MyISAM VERSION: 10 ROW_FORMAT: Dynamic TABLE_ROWS: 11 AVG_ROW_LENGTH: 21 DATA_LENGTH: 240MAX_DATA_LENGTH: 281474976710655 INDEX_LENGTH: 2048 DATA_FREE: 0 AUTO_INCREMENT: 16 CREATE_TIME: 2012-09-07 03:07:37 UPDATE_TIME: 2012-09-23 07:57:37 CHECK_TIME: NULLTABLE_COLLATION: latin1_swedish_ci CHECKSUM: NULL CREATE_OPTIONS: TABLE_COMMENT: *************************** 2. row *************************** TABLE_CATALOG: NULL TABLE_SCHEMA: db_info TABLE_NAME: test TABLE_TYPE: BASE TABLE ENGINE: MyISAM VERSION: 10 ROW_FORMAT: Fixed TABLE_ROWS: 3 AVG_ROW_LENGTH: 7 DATA_LENGTH: 21MAX_DATA_LENGTH: 1970324836974591 INDEX_LENGTH: 1024 DATA_FREE: 0 AUTO_INCREMENT: NULL CREATE_TIME: 2012-09-22 02:25:01 UPDATE_TIME: 2012-09-22 02:37:18 CHECK_TIME: NULLTABLE_COLLATION: latin1_swedish_ci CHECKSUM: NULL CREATE_OPTIONS: TABLE_COMMENT: *************************** 3. row *************************** TABLE_CATALOG: NULL TABLE_SCHEMA: test TABLE_NAME: test TABLE_TYPE: BASE TABLE ENGINE: MyISAM VERSION: 10 ROW_FORMAT: Dynamic TABLE_ROWS: 3 AVG_ROW_LENGTH: 20 DATA_LENGTH: 60MAX_DATA_LENGTH: 281474976710655 INDEX_LENGTH: 1024 DATA_FREE: 0 AUTO_INCREMENT: NULL CREATE_TIME: 2012-09-07 20:44:41 UPDATE_TIME: 2012-09-07 20:44:41 CHECK_TIME: NULLTABLE_COLLATION: latin1_swedish_ci CHECKSUM: NULL CREATE_OPTIONS: TABLE_COMMENT: 3 rows in set (0.00 sec)
2、FILES。关于NDB硬盘数据文件的信息。
3、表格限制信息、关键字段使用情况:涉及数据表及各列上的限制信息。通常情况下,唯一索引与外键常被视为这些限制的一部分.
4、STATISTICS。关于数据表索引特性的信息。
5、REFERENTIAL_CONSTRAINS。关于外键的信息。
- 涉及支持的字符集及其排序规则。各排序规则与其对应的字符集之间的映射关系信息
7、ENGINES、PLUGINS。关于存储引擎和服务器插件的信息。
- 包括用户权限(USER_PRIVILEGES)、表权限(TABLE_PRIVILEVES)、数据库级别权限(SCHEMA_PRIVILEVES)以及列级别权限(COLUMN_PRIVILEVES)。涉及全局权限、数据库级权限、表级权限和列级权限的信息。具体来源于MySQL数据库中的user表(用户表)、db表(默认库表)、tables_priv表和column_priv表。
9、PROCESSLIST。在服务器内执行的线程的信息。
- 全局(GLOBAL)和会话(SESSION)级系统变量(GLOBAL VARIABLES)和状态相关的参数(STATUS PARAMETERS)的作用域
三、从命令行获取元数据
先介绍一个命令的使用:mysqlshow。
mysqlshow[选项] [db_name [tbl_name [col_name]]]
1、如果没有给出数据库,显示所有匹配的数据库。
2、如果没有给出表,显示数据库中所有匹配的表。
3、如果没有给出列,显示表中所有匹配的列和列类型。
说明几个常用的选项信息:
1、--keys。查看某给定数据表里的索引信息。
2、--status。查看某给定数据库里的数据表的描述性信息。如:
查询数据库运行状态
当使用该工具时,请注意:若未预先配置默认数据库服务示例程序,请切记添加–host –user –password参数以及其它相关选项如–socket等。
posted on 2012-09-26 10:24 顺其自然EVO 阅读(518) 评论(0) 编辑 收藏 所属分类: 数据库
