MySQL的元數據

元數據訪問方式介紹

 
查詢 INFORMATION_SCHEMA 數據庫表。
– 其中包含 MySQL 數據庫服務器所管理的全部對象的相關數據
 
• 使用 SHOW 語句。
  – 用於獲取數據庫和表信息的 MySQL 專用語句
 
• 使用 DESCRIBE(或 DESC)語句。
  – 用於檢查表結構和列屬性的快捷方式
 
• 使用 mysqlshow 客戶端程序。
  – SHOW 語法的命令行程序
 
 

INFORMATION_SCHEMA 數據庫介紹

• 充當數據庫元數據的中央系統信息庫
  – 模式和模式對象
  – 服務器統計信息(狀態變量、設置、鏈接)
 
• 採用表格式以實現靈活訪問
  – 使用任意 SELECT 語句
 
• 是「虛擬數據庫」
  – 表並不是「真實」表(基表),而是「系統視圖」
  – 根據當前用戶的特權動態填充表
 
注意:爲何說是虛擬數據庫。由於在數據庫的data目錄下並不存在這個數據庫information_schema,而是在數據庫啓動以後生成"系統視圖"。也是爲了保護數據庫的安全。
mysql> use information_schema;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| KEY_COLUMN_USAGE                      |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| SESSION_STATUS                        |
| SESSION_VARIABLES                     |
| STATISTICS                            |
| TABLES                                |
| TABLESPACES                           |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
| INNODB_LOCKS                          |
| INNODB_TRX                            |
| INNODB_SYS_DATAFILES                  |
| INNODB_LOCK_WAITS                     |
| INNODB_SYS_TABLESTATS                 |
| INNODB_CMP                            |
| INNODB_METRICS                        |
| INNODB_CMP_RESET                      |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMPMEM_RESET                   |
| INNODB_FT_DELETED                     |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_SYS_FOREIGN                    |
| INNODB_SYS_COLUMNS                    |
| INNODB_SYS_INDEXES                    |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_SYS_FIELDS                     |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_BUFFER_PAGE                    |
| INNODB_CMPMEM                         |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_FT_BEING_DELETED               |
| INNODB_SYS_TABLESPACES                |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_SYS_FOREIGN_COLS               |
| INNODB_SYS_TABLES                     |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_FT_CONFIG                      |
+---------------------------------------+
59 rows in set (0.00 sec)

咱們未來須要關注的是跟INNODB相關的,好比跟事務、鎖、數據庫對象相關的表mysql

 

使用命令查詢元數據

# 在tables查找數據名爲world的表名、引擎。
SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'world';

 

# 在clolums中查找數據類型爲set的數據庫名、表名、列名
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'set';

 

#查看每一個字符集默認的校驗規則
SELECT CHARACTER_SET_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE IS_DEFAULT = 'Yes';

 

# 統計下全部庫下的全部表的個數
SELECT TABLE_SCHEMA, COUNT(*) FROM INFORMATION_SCHEMA.TABLES GROUP BY TABLE_SCHEMA;

 

# 因爲是虛擬的表只能查詢,不能修改和刪除。因此刪除會報錯!
DELETE FROM INFORMATION_SCHEMA.VIEWS;

 

使用 INFORMATION_SCHEMA 表獲取有關建立 shell 命令的信息

將 SELECT 和 CONCAT 一塊兒使用以建立 mysqldump 腳本

select concat("mysqldump -uroot -poldboy123  ",
            table_schema," ",table_name,">>","/backup/",
            table_schema,"_",table_name,".bak.sql") 
            from information_schema.tables 
            where table_schema='world';

  

直接生成了備份world庫全部表的mysqldump的語句,執行結果以下:

 

使用 mysql 命令生成建立 SQL 語句
SELECT CONCAT('CREATE TABLE ', TABLE_SCHEMA, '.',
			 TABLE_NAME, '_backup LIKE ', TABLE_SCHEMA, '.',
			 TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
			 WHERE TABLE_SCHEMA = 'world';

  

直接生成建立world庫中全部表的備份表的表結構的語句,執行結果以下:

 

SHOW 語句

show databases
show create database oldboy
show tables
show create table t1

SHOW databases:列出全部數據庫
SHOW TABLES:列出默認數據庫中的表
SHOW TABLES FROM <database_name>:列出指定數據庫中的全部表
SHOW COLUMNS FROM <table_name>:顯示錶的列結構
SHOW INDEX FROM <table_name>:顯示錶中有關索引和索引列的信息
SHOW CHARACTER SET:顯示可用的字符集及其默認整理
SHOW COLLATION:顯示每一個字符集的整理
SHOW STATUS:列出當前數據庫狀態
SHOW VARIABLES:列出數據庫中的參數定義值

  

mysqlshow用命令行查詢數據庫信息

[root@minion_1 ~]# mysqlshow -p123456
Warning: Using a password on the command line interface can be insecure.
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| db1                |
| db2                |
| mysql              |
| performance_schema |
| test               |
| world              |
+--------------------+
相關文章
相關標籤/搜索