Navicat 部落格

取得有關資料庫資料表欄的中繼資料 2020 年 9 月 22 日,由 Robert Gravelle 撰寫

某些關聯式資料庫(包括 MySQL 和 SQL Server)具有 INFORMATION_SCHEMA 系統資料庫。它包含資料庫的中繼資料,例如資料庫名稱、資料表名稱、欄的資料類型,甚至存取權限。它有時也稱為資料字典或系統目錄。無論你怎麼稱呼它,INFORMATION_SCHEMA 資料庫都是取得有關資料表欄詳細資料的理想地方。在今天的文章中,我們將使用 INFORMATION_SCHEMA 資料庫來找出欄是否存在以及特定資料表有多少欄。

Navicat 中檢視 INFORMATION_SCHEMA 資料庫

作為系統資料表,除非你明確告訴 Navicat 顯示它,否則你將無法看見 INFORMATION_SCHEMA 資料庫。為此,請將 INFORMATION_SCHEMA 資料庫加入資料庫連線中的「資料庫」清單中:

edit_connection_dialog (75K)

這使我們可以在資料表設計器或檢視器中開啟 Columns 資料表:

INFORMATION_SCHEMA_columns_table (250K)

從欄數目應使你對我們可以從 Columns 資料表中取得哪些類型的資料有所了解。

注意:INFORMATION_SCHEMA 是一個唯讀資料庫,因此你不能變更其結構或內容。

欄數查詢簡介

我們可以像查詢其他資料表一樣查詢 Columns 資料表,以找出有關資料表欄的資訊。以下是基本陳述式:

SELECT count(*) AS anyName FROM information_schema.columns 
WHERE [table_schema = 'yourSchemaName' AND] 
table_name = 'yourTableName'; 

table_schema 是資料表所在的資料庫。這對於查詢來說不是非常重要,但是如果你有多個具有相同欄名的資料庫,則會將結果篩選至該特定資料庫資料表。在要維護同一資料庫的多個複本的情況下,欄計數會計算所有資料表中具有相同名稱的欄。

例如,我有四個 Sakila 資料庫的複本:

MySQl_connection_databases (24K)

結果,當我在不使用 table_schema 的情況下執行查詢時,我得到的欄數為 51,這個數量偏高!

select_column_count_of_film_table (34K)

指定 table_schema 的欄數將更準確為 12:

select_column_count_of_film_table_with_schema (40K)

如果現在在資料表設計器中開啟 film 資料表,我們可以確認 12 欄是正確的:

film_table_design (87K)

判斷欄是否存在

在動態應用程式中,你可能希望尋找有關欄的資訊,包括它是否存在。以下的查詢列出了「title」欄的每個實例和有關的中繼資料,包括其所屬的結構描述和資料表,以及預設值、資料類型和最大長度等詳細資料:

finding_column_info (166K)

總結

在今天的文章中,我們學習了如何利用 INFORMATION_SCHEMA 資料庫來找出欄是否存在以及特定資料表有多少欄。

如果你對 Navicat Premium 感興趣,可以免費試用 14 天!

Navicat 文章
頻道記錄
分享
部落格封存檔