共計 6876 個字符,預計需要花費 18 分鐘才能閱讀完成。
本篇內容主要講解“MySQL 元數據有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL 元數據有哪些”吧!
1. MySQL 元數據
1.1.
元數據訪問方法
數據庫是數據的結構化集合。元數據是“有關數據的數據”。MySQL
通過以下方法提供對元數據的訪問:
INFORMATION_SCHEMA:MySQL
服務器包含一個名為 INFORMATION_SCHEMA
的數據庫(模式)的數據字典,其中包含許多顯示為表的對象。
SHOW
語句:用于獲取服務器統計信息、模式和模式對象的相關數據的專用語法。
SHOW DATABASES
和 SHOW TABLES 返回包含數據庫和表名的列表;SHOW COLUMNS 生成表中列的定義;使用 SHOW
語句需要有 SELECT 權限。
DESCRIBE:可用于查詢表結構和列屬性的 SQL
語句快捷方式
mysqlshow:用作指向一些 SHOW
語句的命令行命令。您設置的參數將決定要顯示的信息,然后程序會發出相應的 SHOW
語句并顯示語句的結果。
下面將詳細介紹這 4 中訪問元數據的方法。
1.2.
INFORMATION_SCHEMA
數據庫
INFORMATION_SCHEMA
數據庫充當數據庫元數據的中央系統信息庫,包含模式和模式對象、服務器統計信息(狀態變量、設置、連接)。它未存儲在硬盤上,從這個方面來看,它是“虛擬數據庫”;但是,它與其他任何數據庫一樣包含表,與其他任何表一樣可以使用 SELECT
來訪問其中表的內容
1)
查詢 INFORMATION_SCHEMA
中的表
mysql SELECT TABLE_NAME
– FROM INFORMATION_SCHEMA.TABLES
– WHERE TABLE_SCHEMA = information_schema
– ORDER BY TABLE_NAME;
INFORMATION_SCHEMA
表包含以下類型的信息:
?
表信息
COLUMNS:表和視圖中的列
ENGINES:存儲引擎
SCHEMATA:數據庫
TABLES:數據庫中的表
VIEWS:數據庫中的視圖
?
分區
PARTITIONS:表分區
FILES:存儲 MySQL NDB
磁盤數據表的文件
?
權限
COLUMN_PRIVILEGES:MySQL
用戶帳戶所擁有的列權限
SCHEMA_PRIVILEGES:MySQL
用戶帳戶所擁有的數據庫權限
TABLE_PRIVILEGES:MySQL
用戶帳戶所擁有的表權限
USER_PRIVILEGES:MySQL
用戶帳戶所擁有的全局權限
?
字符集支持
CHARACTER_SETS:可用的字符集
COLLATIONS:每個字符集的整理
COLLATION_CHARACTER_SET_APPLICABILITY:適用于特定字符集的整理
?
約束和索引
KEY_COLUMN_USAGE:關鍵列的約束
REFERENTIAL_CONSTRAINTS:外鍵
STATISTICS:表索引
TABLE_CONSTRAINTS:表的約束
?
服務器設置和狀態
KEY_COLUMN_USAGE:約束
GLOBAL_STATUS:所有 MySQL
連接的狀態值
GLOBAL_VARIABLES:用于新的 MySQL
連接的值
PLUGINS:服務器插件
PROCESSLIST:指示哪些線程正在運行
SESSION_STATUS:當前 MySQL
連接的狀態值
SESSION_VARIABLES:當前 MySQL
連接的生效值
?
例程及相關信息
EVENTS:預定事件
ROUTINES:存儲過程和功能
TRIGGERS:數據庫中的觸發器
PARAMETERS:存儲過程和功能參數以及存儲函數
?
InnoDB
INNODB_CMP
和 INNODB_CMP_RESET:對壓縮的 InnoDB
表的相關操作的狀態
INNODB_CMPMEM
和 INNODB_CMPMEM_RESET:InnoDB
緩沖池中壓縮頁面的狀態
INNODB_LOCKS:InnoDB
事務所請求和持有的每個鎖
INNODB_LOCK_WAITS:每個阻塞的 InnoDB
事務的一個或多個行鎖
INNODB_TRX:當前正在 InnoDB
內部執行的所有事務
TABLESPACES:活動的表空間
有關 INFORMATION_SCHEMA
表的更多信息,請參閱《MySQL
參考手冊》:
http://dev.mysql.com/doc/refman/5.6/en/information-schema.html。
例如:查詢 INFORMATION_SCHEMA
數據庫表列:
mysql SELECT COLUMN_NAME
– FROM INFORMATION_SCHEMA.COLUMNS
– WHERE TABLE_SCHEMA = INFORMATION_SCHEMA
– AND TABLE_NAME = VIEWS
當使用 SELECT
語句在 INFORMATION_SCHEMA
表中檢索元數據時,您可以使用任何常見的 SELECT
功能。通過使用 CREATE TABLE…SELECT
語句或 INSERT…SELECT
語句,您可以將 INFORMATION_SCHEMA
查詢的結果檢索到其他表中。您可以保存結果,以便稍后在其他語句中使用它們。
A.
顯示用于給定數據庫中表的存儲引擎
mysql SELECT TABLE_NAME, ENGINE
– FROM INFORMATION_SCHEMA.TABLES
– WHERE TABLE_SCHEMA = world_innodb
B.
查找所有包含 SET
列的表
mysql SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
– FROM INFORMATION_SCHEMA.COLUMNS
– WHERE DATA_TYPE = set
C.
顯示每個字符集的默認整理
mysql SELECT CHARACTER_SET_NAME, COLLATION_NAME
– FROM INFORMATION_SCHEMA.COLLATIONS
– WHERE IS_DEFAULT = Yes
D.
顯示每個數據庫中表的編號
mysql SELECT TABLE_SCHEMA, COUNT(*)
– FROM INFORMATION_SCHEMA.TABLES
– GROUP BY TABLE_SCHEMA;
E.
INFORMATION_SCHEMA
表是只讀的,無法用 INSERT、DELETE
或 UPDATE
之類的語句進行修改。如果執行這些類型的語句以嘗試更改 INFORMATION_SCHEMA
表中的數據,服務器將生成錯誤。
mysql DELETE FROM INFORMATION_SCHEMA.VIEWS;
ERROR 1044 (42000): Access denied for user
root @ localhost to database information_schema
2)
使用 INFORMATION_SCHEMA
表創建 Shell
命令
使用 CONCAT
功能可以將字符串內容結合起來創建可在命令行中執行的 shell
腳本。如示例所示,SQL
語句將生成一條輸出,僅轉儲 world_innodb
數據庫中那些以單詞“Country”開始的的表。輸出將生成可以在 shell
命令行上正確執行的 shell
腳本。下一步是將此輸出存儲在一個可在 shell
命令行中執行的批處理文件中。這通過添加子句 INTO OUTFILE
來完成:
mysql SELECT CONCAT(mysqldump -uroot -p ,
– TABLE_SCHEMA, ,TABLE_NAME, ,TABLE_SCHEMA, .sql )
– FROM TABLES WHERE TABLE_NAME LIKE Country%
– INTO OUTFILE /Country_Dump.sh
然后可以在命令行中執行此文件,命令行將運行示例的兩個 mysqldump
命令:
shell \tmp\Country_Dump.sh
shell \tmp\mysqldump -uroot -poracle world_innodb Country world_innodb.sql
shell \tmp\mysqldump -uroot -poracle world_innodb Country_Language world_innodb.sql
3)
使用 INFORMATION_SCHEMA
表創建 SQL
語句
使用 mysql
命令創建 SQL
語句,使用 -e
選項輸入 SELECT/CONCAT
語句:
shell mysql -uroot -p –silent –skip-column-names -e
SELECT CONCAT(CREATE TABLE , TABLE_SCHEMA, . ,
TABLE_NAME, _backup LIKE , TABLE_SCHEMA, . ,
TABLE_NAME, ) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = world_innodb
將導致以下語句發送到標準輸出:
CREATE TABLE world_innodb.City_backup LIKE world_innodb.City;
CREATE TABLE world_innodb.Country_backup LIKE world_innodb.Country_backup;
CREATE TABLE world_innodb.CountryLanguage_backup LIKE world_innodb.CountryLanguage_backup;
INFORMATION_SCHEMA
表可創建可在命令行中執行的 SQL
語句。本示例使用 mysql
命令執行了一個語句,以制作 world_innodb
數據庫中所有表的精確副本。此命令將創建 SQL
輸出,如果執行該輸出,將基于 world_innodb
數據庫中的表創建三個備份表。
注:–silent
命令在輸出中刪除列標題,–skip-column-names
命令刪除輸出中的格式(使輸出類似于表的格式)。這兩個命令用來確保對命令自身的解釋是正確的,沒有任何干擾執行的外部格式或標題行問題。
添加管道符號 (|)
并隨之執行 mysql
命令會將這些 SQL
語句發送到 MySQL
服務器以便執行:
shell mysql -uroot -p –silent –skip-column-names -e SELECT CONCAT(CREATE TABLE , TABLE_SCHEMA, . , TABLE_NAME, _backup LIKE , TABLE_SCHEMA, . , TABLE_NAME,)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = world_innodb | mysql -uroot -poracle
1.3.
SHOW
語句
除了 INFORMATION_SCHEMA
表之外,MySQL
還支持 SHOW
和 DESCRIBE
語句,作為訪問元數據的備選方式。SHOW
和 DESCRIBE
語法不如使用 INFORMATION_SCHEMA
查詢靈活,但是對于大多數用途,SHOW
和 DESCRIBE
語法就足夠了。在這些情況下,使用 MySQL
特定語法通常會更快速、簡單。MySQL 支持的 SHOW 語句有:
SHOW DATABASES
SHOW TABLES
SHOW TABLE STATUS
SHOW CREATE TABLE
SHOW OPEN TABLES
SHOW INDEX
SHOW COLUMNS
SHOW PROCESSLIST
SHOW COLLATION
SHOW CHARACTER SET
SHOW
語句示例:
mysql SHOW DATABASES;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| test |
| world_innodb |
+——————–+
mysql SHOW TABLES;
mysql SHOW TABLES FROM mysql;
mysql SHOW TABLES FROM INFORMATION_SCHEMA;
mysql SHOW COLUMNS FROM CountryLanguage;
mysql SHOW FULL COLUMNS FROM CountryLanguage\G
mysql SHOW DATABASES LIKE m%
mysql SHOW COLUMNS FROM Country WHERE `Default` IS NULL;
mysql SHOW INDEX FROM City\G
mysql SHOW CHARACTER SET;
mysql SHOW COLLATION;
1.4.
DESCRIBE
語句
DESCRIBE 等效于 SHOW COLUMNS,可以縮寫為 DESC
mysql DESCRIBE table_name
顯示 INFORMATION_SCHEMA
表信息
mysql DESCRIBE INFORMATION_SCHEMA.CHARACTER_SETS;
+———————-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———————-+————-+——+—–+———+——-+
| CHARACTER_SET_NAME | varchar(64) | NO | | | |
| DEFAULT_COLLATE_NAME | varchar(64) | NO | | | |
| DESCRIPTION | varchar(60) | NO | | | |
| MAXLEN | bigint(3) | NO | | 0 | |
+———————-+————-+——+—–+———+——-+
例如:
mysql DESCRIBE table_name;
mysql DESC table_name;
以下語句等效于上述 DESCRIBE/DESC
示例:
mysql SHOW COLUMNS FROM table_name;
但是,SHOW COLUMNS
支持可選的 LIKE
和 WHERE
子句,而 DESCRIBE
不支持。
EXPLAIN
:當指定表名稱作為參數時,EXPLAIN
等效于 DESCRIBE:
mysql EXPLAIN table_name;
1.5.
mysqlshow 命令
mysqlshow
為各種格式的 SHOW
語句提供了一個命令行界面,這些語句用于列出數據庫的名稱、數據庫中的表或有關表列或索引的信息。
mysqlshow
的選項部分可包含任一標準連接參數選項,例如 –host
或 –user。如果默認連接參數不適合,則必須提供選項。mysqlshow
也接受特定于其自身運行的選項。使用 –help
選項調用 mysqlshow
可查看其選項的完整列表。mysqlshow
所執行的操作取決于已提供的非選項參數的數量。
mysqlshow
示例
顯示所有數據庫或特定數據庫、表和 / 或列的相關信息:
A.
在沒有參數的情況下,mysqlshow
將顯示類似于 SHOW DATABASES
的結果
shell mysqlshow -u user_name -p password
+——————–+
| Databases |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| test |
| world_innodb |
+——————–+
B.
在使用單個參數的情況下,mysqlshow
將該參數解釋為數據庫名稱,并針對該數據庫顯示類似于 SHOW TABLES
的結果。
shell mysqlshow world_innodb
C.
在有兩個參數的情況下,mysqlshow
將參數解釋為數據庫和表名稱,并針對該表顯示類似于 SHOW FULL COLUMNS
的結果。
shell mysqlshow world_innodb City
D.
在有三個參數的情況下,其輸出與兩個參數的情況相同,不同之處在于:mysqlshow 將第三個參數當做列名稱,且僅針對該列顯示 SHOW FULL COLUMNS
輸出。
shell mysqlshow world_innodb City CountryCode
E.
如果命令行中最后的參數包含特殊字符,mysqlshow
會將該參數解釋為模式,且僅顯示與該模式匹配的名稱。特殊字符包括:%
*(匹配任一字符序列),以及
?(匹配任一單個字符)。本示例中的命令僅顯示那些名稱始于 w
的數據庫。
shell mysqlshow w%
注:這些示例要求在執行命令時使用用戶和口令作為參數。
到此,相信大家對“MySQL 元數據有哪些”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!