元數據訪問方式介紹
查詢 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相關的,比如跟事務、鎖、數據庫對象相關的表
使用命令查詢元數據
# 在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 | +--------------------+
