獲取數據庫元數據

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等信息。

發佈了65 篇原創文章 · 獲贊 27 · 訪問量 58萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章