MYSQL中information_schema的使用
關(guān)鍵要點(diǎn)
information_schema
是 MySQL 中的一個(gè)虛擬數(shù)據(jù)庫(kù),提供關(guān)于數(shù)據(jù)庫(kù)結(jié)構(gòu)和權(quán)限的元數(shù)據(jù)信息。- 研究表明,它包含只讀表(視圖),用戶可查詢但不能修改,適合數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)。
- 它遵循 SQL 標(biāo)準(zhǔn),但 MySQL 有一些特定擴(kuò)展,性能查詢需注意。
什么是information_schema?
information_schema
是 MySQL 中的一個(gè)虛擬數(shù)據(jù)庫(kù),存儲(chǔ)關(guān)于 MySQL 服務(wù)器及其數(shù)據(jù)庫(kù)的元數(shù)據(jù),例如數(shù)據(jù)庫(kù)名稱、表結(jié)構(gòu)、列類型和訪問(wèn)權(quán)限等。它不是物理數(shù)據(jù)庫(kù),而是通過(guò)一組只讀表(實(shí)際上是視圖)實(shí)現(xiàn)的,方便用戶了解服務(wù)器和數(shù)據(jù)庫(kù)的詳細(xì)信息。
主要功能
- 提供數(shù)據(jù)庫(kù)元數(shù)據(jù),如表名、列類型和權(quán)限。
- 支持通過(guò)
SELECT
語(yǔ)句查詢,但不能插入、更新或刪除數(shù)據(jù)。 - 替代傳統(tǒng)的
SHOW
語(yǔ)句,提供更靈活的元數(shù)據(jù)訪問(wèn)方式。
使用示例
例如,您可以查詢某個(gè)數(shù)據(jù)庫(kù)的表信息:
SELECT table_name, table_type, engine FROM information_schema.tables WHERE table_schema = 'db5' ORDER BY table_name;
這會(huì)列出 db5
數(shù)據(jù)庫(kù)中的所有表及其類型和存儲(chǔ)引擎。
MySQL 中information_schema簡(jiǎn)介詳細(xì)報(bào)告
引言
information_schema
是 MySQL 中的一個(gè)虛擬數(shù)據(jù)庫(kù),用于提供關(guān)于 MySQL 服務(wù)器及其數(shù)據(jù)庫(kù)的元數(shù)據(jù)(metadata)。這些元數(shù)據(jù)包括數(shù)據(jù)庫(kù)名稱、表名稱、列的數(shù)據(jù)類型、訪問(wèn)權(quán)限等信息,是數(shù)據(jù)庫(kù)管理員和開(kāi)發(fā)者查詢和分析 MySQL 服務(wù)器及其對(duì)象的重要資源。根據(jù)官方 MySQL 文檔(截至 2025 年 7 月 19 日),information_schema
遵循 SQL 標(biāo)準(zhǔn),并包含 MySQL 特定的擴(kuò)展,適合各種數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)場(chǎng)景。
定義與背景
information_schema
是一個(gè)邏輯數(shù)據(jù)庫(kù),不是物理存在的數(shù)據(jù)庫(kù)目錄。它由一組只讀表組成,這些表實(shí)際上是視圖(views),而不是基礎(chǔ)表,因此沒(méi)有關(guān)聯(lián)的文件,也不能設(shè)置觸發(fā)器(triggers)。根據(jù) MySQL 8.0 參考手冊(cè),information_schema
提供了一種標(biāo)準(zhǔn)化的方式來(lái)訪問(wèn)數(shù)據(jù)庫(kù)元數(shù)據(jù),類似于 SQL 標(biāo)準(zhǔn)中的數(shù)據(jù)字典(data dictionary)或系統(tǒng)目錄(system catalog)。
研究表明,information_schema
自 MySQL 早期版本起就存在,旨在幫助用戶了解服務(wù)器和數(shù)據(jù)庫(kù)的結(jié)構(gòu)和狀態(tài)。它是 SQL:2003 標(biāo)準(zhǔn)的一部分,MySQL 實(shí)現(xiàn)了這一標(biāo)準(zhǔn),并添加了一些特定擴(kuò)展以適應(yīng)其功能需求。
主要特點(diǎn)
以下是 information_schema
的核心特點(diǎn):
- 虛擬數(shù)據(jù)庫(kù):
information_schema
是一個(gè)虛擬數(shù)據(jù)庫(kù),存在于每個(gè) MySQL 實(shí)例中,存儲(chǔ)關(guān)于所有其他數(shù)據(jù)庫(kù)的信息。 - 只讀表:包含多個(gè)只讀表,這些表是視圖,不能進(jìn)行
INSERT
、UPDATE
或DELETE
操作,僅支持SELECT
查詢。 - 元數(shù)據(jù)存儲(chǔ):提供關(guān)于數(shù)據(jù)庫(kù)、表、列、索引、權(quán)限、字符集和校對(duì)規(guī)則等詳細(xì)信息。例如:
- 數(shù)據(jù)庫(kù)名稱和特性(
schemata
表)。 - 表名稱、類型(如
BASE TABLE
或VIEW
)和存儲(chǔ)引擎(tables
表)。 - 列名稱、數(shù)據(jù)類型和是否允許空值(
columns
表)。
- 數(shù)據(jù)庫(kù)名稱和特性(
- 標(biāo)準(zhǔn)化與擴(kuò)展:遵循 ANSI/ISO SQL:2003 標(biāo)準(zhǔn),但包含 MySQL 特定的列和表,如
ENGINE
列在TABLES
表中,反映 MySQL 的存儲(chǔ)引擎信息。 - 性能考慮:查詢
information_schema
時(shí),尤其是涉及多個(gè)數(shù)據(jù)庫(kù)的查詢,可能較慢,建議使用EXPLAIN
優(yōu)化查詢。
以下是 information_schema
中一些常見(jiàn)表的示例:
表名稱 | 主要功能 | 示例列 |
---|---|---|
tables | 提供數(shù)據(jù)庫(kù)中表的信息 | table_name, table_type, engine |
columns | 提供表中列的詳細(xì)信息 | column_name, data_type, is_nullable |
schemata | 提供數(shù)據(jù)庫(kù)的信息 | schema_name, default_character_set_name |
column_privileges | 提供列級(jí)別的權(quán)限信息 | grantee, table_schema, column_name |
character_sets | 提供支持的字符集信息 | character_set_name, default_collate_name |
collations | 提供支持的校對(duì)規(guī)則信息 | collation_name, character_set_name |
使用方式
用戶可以通過(guò)標(biāo)準(zhǔn)的 SQL 查詢?cè)L問(wèn) information_schema
中的表。例如,以下查詢列出 db5
數(shù)據(jù)庫(kù)中的所有表及其類型和存儲(chǔ)引擎:
SELECT table_name, table_type, engine FROM information_schema.tables WHERE table_schema = 'db5' ORDER BY table_name;
輸出可能如下(示例數(shù)據(jù)):
table_name | table_type | engine |
---|---|---|
fk | BASE TABLE | InnoDB |
fk2 | BASE TABLE | InnoDB |
goto | BASE TABLE | MyISAM |
into | BASE TABLE | MyISAM |
k | BASE TABLE | MyISAM |
kurs | BASE TABLE | MyISAM |
loop | BASE TABLE | MyISAM |
pk | BASE TABLE | InnoDB |
t | BASE TABLE | MyISAM |
t2 | BASE TABLE | MyISAM |
t3 | BASE TABLE | MyISAM |
t7 | BASE TABLE | MyISAM |
tables | BASE TABLE | MyISAM |
v | VIEW | NULL |
v2 | VIEW | NULL |
v3 | VIEW | NULL |
v56 | VIEW | NULL |
此查詢耗時(shí) 0.01 秒,返回 17 行,展示了 information_schema
的查詢效率。
information_schema
還可以替代傳統(tǒng)的 SHOW
語(yǔ)句,提供更靈活的元數(shù)據(jù)訪問(wèn)。例如:
SHOW TABLES
可以用以下查詢替代:SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE();
- 這種方式符合 Codd 的規(guī)則,語(yǔ)法更熟悉,且與 Oracle Database 等其他數(shù)據(jù)庫(kù)系統(tǒng)兼容。
權(quán)限與可見(jiàn)性
根據(jù)文檔,大多數(shù) information_schema
表對(duì)所有用戶可見(jiàn),但用戶只能看到他們有權(quán)限訪問(wèn)的對(duì)象的信息。例如:
- 如果用戶沒(méi)有權(quán)限訪問(wèn)某個(gè)數(shù)據(jù)庫(kù),他們將無(wú)法從
information_schema.tables
中看到該數(shù)據(jù)庫(kù)的表。 - 某些情況下,如
ROUTINE_DEFINITION
列在ROUTINES
表中,如果用戶權(quán)限不足,將顯示NULL
。 - InnoDB 相關(guān)的表(如名稱以
INNODB_
開(kāi)頭的表)需要PROCESS
權(quán)限才能訪問(wèn)。 information_schema
和SHOW
語(yǔ)句的權(quán)限要求相同。
性能與注意事項(xiàng)
查詢 information_schema
時(shí)需注意性能問(wèn)題:
- 涉及多個(gè)數(shù)據(jù)庫(kù)的查詢可能較慢,建議使用
EXPLAIN
語(yǔ)句分析和優(yōu)化查詢。 - 字符列(如
TABLES.TABLE_NAME
)通常使用VARCHAR(N) CHARACTER SET utf8mb3
,默認(rèn)校對(duì)規(guī)則為utf8mb3_general_ci
,文件系統(tǒng)的區(qū)分大小寫可能影響搜索結(jié)果。 - 從 MySQL 8.0.30 開(kāi)始,
information_schema
中的某些表(如columns
和statistics
)默認(rèn)顯示生成的不可見(jiàn)主鍵(Generated Invisible Primary Keys)的信息。如果需要隱藏,可以通過(guò)設(shè)置系統(tǒng)變量show_gipk_in_create_table_and_information_schema
為OFF
。
應(yīng)用場(chǎng)景
information_schema
在以下場(chǎng)景中非常有用:
- 數(shù)據(jù)庫(kù)管理:數(shù)據(jù)庫(kù)管理員(DBA)可以使用它來(lái)監(jiān)控和管理 MySQL 服務(wù)器的狀態(tài),例如檢查表的存儲(chǔ)引擎、列的數(shù)據(jù)類型等。
- 開(kāi)發(fā)和調(diào)試:開(kāi)發(fā)者可以在開(kāi)發(fā)過(guò)程中動(dòng)態(tài)獲取數(shù)據(jù)庫(kù)結(jié)構(gòu)信息,例如在編寫動(dòng)態(tài) SQL 時(shí)獲取表或列的名稱。
- 權(quán)限審計(jì):可以通過(guò)查詢權(quán)限相關(guān)的表(如
column_privileges
)來(lái)審計(jì)用戶的訪問(wèn)權(quán)限。
歷史與發(fā)展
根據(jù) MySQL 文檔,information_schema
是 SQL 標(biāo)準(zhǔn)的一部分,自 MySQL 早期版本起就存在,并不斷擴(kuò)展以支持新功能。2025 年 7 月 19 日,最新版本的 MySQL(如 8.0 和 8.4)繼續(xù)支持和優(yōu)化 information_schema
,使其成為數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)的強(qiáng)大工具。
對(duì)比與爭(zhēng)議
與傳統(tǒng)的 SHOW
語(yǔ)句相比,information_schema
提供更標(biāo)準(zhǔn)化的查詢方式,但查詢性能可能不如 SHOW
語(yǔ)句快,尤其在處理大型數(shù)據(jù)庫(kù)時(shí)。根據(jù)社區(qū)討論(如 Stack Exchange),部分用戶認(rèn)為 information_schema
的查詢結(jié)果更全面,但需要注意性能優(yōu)化。
到此這篇關(guān)于MYSQL中information_schema的使用的文章就介紹到這了,更多相關(guān)MYSQL information_schema內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL中INFORMATION_SCHEMA的具體使用
- MySQL系統(tǒng)庫(kù)之information_schema的實(shí)現(xiàn)
- MySQL之information_schema數(shù)據(jù)庫(kù)詳細(xì)講解
- 關(guān)于MySQL繞過(guò)授予information_schema中對(duì)象時(shí)報(bào)ERROR 1044(4200)錯(cuò)誤
- mysql數(shù)據(jù)庫(kù)中的information_schema和mysql可以刪除嗎?
- 解析MySQL的information_schema數(shù)據(jù)庫(kù)
相關(guān)文章
Ubuntu中遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)的詳細(xì)圖文教程
Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux發(fā)行版操作系統(tǒng),這篇文章主要為大家詳細(xì)介紹了Ubuntu中遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)的詳細(xì)圖文教程,有需要的小伙伴可以參考下2025-04-04sql獲取存儲(chǔ)過(guò)程返回?cái)?shù)據(jù)過(guò)程解析
這篇文章主要介紹了sql獲取存儲(chǔ)過(guò)程返回?cái)?shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12MySQL主從復(fù)制數(shù)據(jù)同步的實(shí)現(xiàn)步驟
MySQL主從復(fù)制是一種數(shù)據(jù)同步技術(shù),通過(guò)將數(shù)據(jù)從主數(shù)據(jù)庫(kù)服務(wù)器復(fù)制到一個(gè)或多個(gè)從數(shù)據(jù)庫(kù)服務(wù)器來(lái)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12關(guān)于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別
這篇文章主要介紹了關(guān)于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08非常實(shí)用的MySQL函數(shù)全面總結(jié)詳解示例分析教程
這篇文章主要為大家介紹了非常實(shí)用的MySQL函數(shù)的詳解示例分析,文中全面的概括了MySQL函數(shù),并進(jìn)行了詳細(xì)的示例講解,有需要的朋友可以借鑒參考下2021-10-10