獲取數據庫元數據
MySQL 提供幾種辦法以使獲取關于數據庫和數據庫里各種對象(也就是數據庫的元數據)的信息,如下:
1、SHOW語句,如SHOW TABLES等等。
2、INFORMATION_SCHEMA數據庫里的數據表。
3、命令行程序,如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) |
分別對這些列簡單的說明。
1、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) |
2、FILES。關于NDB硬盤數據文件的信息。
3、TABLE_CONSTRAINS、KEY_COLUMN_USAGE:關于數據表和數據列上的約束條件的信息,一般唯一化索引和外鍵都屬于這些約束條件。
4、STATISTICS。關于數據表索引特性的信息。
5、REFERENTIAL_CONSTRAINS。關于外鍵的信息。
6、CHARACTER_SETS、COLLATIONS、COLLATION_CHARACTER_SET_APPLICABILITY。關于所支持的字符集,每種字符集的排序方式、每種排序方式與它的字符集的映射關系信息。
7、ENGINES、PLUGINS。關于存儲引擎和服務器插件的信息。
8、USER_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、COLUMN_PRIVILEGES。全局、數據庫、數據表和數據列的權限信息。這些信息分別來自mysql數據庫里的user,db,tables_priv,column_priv數據表。
9、PROCESSLIST。在服務器內執行的線程的信息。
10、GLOBAL_VARIABLES、SESSION_VARIABLES、GLOBAL_STATUS、SESSION_STATUS。全局和會話級系統變量和狀態變量的值。
三、從命令行獲取元數據
先介紹一個命令的使用:mysqlshow。
mysqlshow[選項] [db_name [tbl_name [col_name]]] |
1、如果沒有給出數據庫,顯示所有匹配的數據庫。
2、如果沒有給出表,顯示數據庫中所有匹配的表。
3、如果沒有給出列,顯示表中所有匹配的列和列類型。
說明幾個常用的選項信息:
1、--keys。查看某給定數據表里的索引信息。
2、--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等信息。
posted on 2012-09-26 10:24 順其自然EVO 閱讀(615) 評論(0) 編輯 收藏 所屬分類: 數據庫