MySQL 提供几种办法以使获取关于数据库和数据库里各种对象(也就是数据库的元数据)的信息,如下:
- SHOW语句,如SHOW TABLES等等。
- INFORMATION_SCHEMA数据库里的数据表。
- 命令行程序,如mysqlshow或者是mysqldump。
一,用SHOW语句获取
获取服务器所管理的数据库。
SHOW DATABASES;
查看给定数据库的创建语句。
SHOW CREATE DATABASE db_name;
列出默认数据库里的所有数据表。
SHOW TABLES;
列出给定数据库里的所有数据表。
SHOW TABLES FROM db_name;
查看给定数据表的创建语句。
SHOW CREATE TABLE tbl_name;
查看指定数据表的数据列和索引信息。
SHOW COLUMNS FROM tbl_name; 这个语句和DESC 的输出是一样的。
SHOW INDEX FROM tbl_name;
有几种SHOW语句还可以带有LIKE 'pattern'子句,用来把SHOW语句的输出限定在给定范围,并且允许使用通配符号。
二,从INFORMATION_SCHEMA数据库获取元数据
可以将这个数据库看成一个虚拟的数据库,这个数据库里的数据表是一些由不同的数据库元素数据构成的视图,这个数据库里有以下数据表项:
mysql> show tables from information_schema;
+---------------------------------------+
| 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 |
+---------------------------------------+
28 rows in set (0.01 sec)
分别对这些列简单的说明。
- SCHEMATA、TABLES、VIEWS、ROUTIMES、TRIGGERS、EVENTS、PARTITIONS、COLUMNS,表示的信息分别是数据库,数据表,视图,存储例程,触发器,数据库里的事件,数据表分区和数据列的信息,以数据表为例,就是TABLES表,有以下列:
这是我查看一些数据表的记录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: 240 MAX_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: NULL TABLE_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: 21 MAX_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: NULL TABLE_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: 60 MAX_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: NULL TABLE_COLLATION: latin1_swedish_ci CHECKSUM: NULL CREATE_OPTIONS: TABLE_COMMENT: 3 rows in set (0.00 sec)
- FILES。关于NDB硬盘数据文件的信息。
- TABLE_CONSTRAINS、KEY_COLUMN_USAGE:关于数据表和数据列上的约束条件的信息,一般唯一化索引和外键都属于这些约束条件。
- STATISTICS。关于数据表索引特性的信息。
- REFERENTIAL_CONSTRAINS。关于外键的信息。
- CHARACTER_SETS、COLLATIONS、COLLATION_CHARACTER_SET_APPLICABILITY。关于所支持的字符集,每种字符集的排序方式、每种排序方式与它的字符集的映射关系信息。
- ENGINES、PLUGINS。关于存储引擎和服务器插件的信息。
- USER_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、COLUMN_PRIVILEGES。全局、数据库、数据表和数据列的权限信息。这些信息分别来自mysql数据库里的user,db,tables_priv,column_priv数据表。
- PROCESSLIST。在服务器内执行的线程的信息。
- GLOBAL_VARIABLES、SESSION_VARIABLES、GLOBAL_STATUS、SESSION_STATUS。全局和会话级系统变量和状态变量的值。
三,从命令行获取元数据
先介绍一个命令的使用:mysqlshow。
mysqlshow[选项] [db_name [tbl_name [col_name]]]
- 如果没有给出数据库,显示所有匹配的数据库。
- 如果没有给出表,显示数据库中所有匹配的表。
- 如果没有给出列,显示表中所有匹配的列和列类型。
说明几个常用的选项信息:
- --keys . 查看某给定数据表里的索引信息。
- --status 。 查看某给定数据库里的数据表的描述性信息。如:
[root@localhost ~]# mysqlshow --status db_info Database: db_info +--------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +--------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+ | i_node | MyISAM | 10 | Dynamic | 11 | 21 | 240 | 281474976710655 | 2048 | 0 | 16 | 2012-09-07 03:07:37 | 2012-09-23 07:57:37 | | latin1_swedish_ci | | | | | test | MyISAM | 10 | Fixed | 3 | 7 | 21 | 1970324836974591 | 1024 | 0 | | 2012-09-22 02:25:01 | 2012-09-22 02:37:18 | | latin1_swedish_ci | | | | +--------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------
在使用该工具的时候,如果没有默认的数据库服务例程,不要忘了加上--host --user --password甚至是 --socket等信息。