某些關聯式資料庫(包括 MySQL 和 SQL Server)具有 INFORMATION_SCHEMA 系統資料庫。它包含資料庫的中繼資料,例如資料庫名稱、資料表名稱、欄的資料類型,甚至存取權限。它有時也稱為資料字典或系統目錄。無論你怎麼稱呼它,INFORMATION_SCHEMA 資料庫都是取得有關資料表欄詳細資料的理想地方。在今天的文章中,我們將使用 INFORMATION_SCHEMA 資料庫來找出欄是否存在以及特定資料表有多少欄。
在 Navicat 中檢視 INFORMATION_SCHEMA 資料庫
作為系統資料表,除非你明確告訴 Navicat 顯示它,否則你將無法看見 INFORMATION_SCHEMA 資料庫。為此,請將 INFORMATION_SCHEMA 資料庫加入資料庫連線中的「資料庫」清單中:
這使我們可以在資料表設計器或檢視器中開啟 Columns 資料表:
從欄數目應使你對我們可以從 Columns 資料表中取得哪些類型的資料有所了解。
注意:INFORMATION_SCHEMA 是一個唯讀資料庫,因此你不能變更其結構或內容。
欄數查詢簡介
我們可以像查詢其他資料表一樣查詢 Columns 資料表,以找出有關資料表欄的資訊。以下是基本陳述式:
SELECT count(*) AS anyName FROM information_schema.columns WHERE [table_schema = 'yourSchemaName' AND] table_name = 'yourTableName';
table_schema 是資料表所在的資料庫。這對於查詢來說不是非常重要,但是如果你有多個具有相同欄名的資料庫,則會將結果篩選至該特定資料庫資料表。在要維護同一資料庫的多個複本的情況下,欄計數會計算所有資料表中具有相同名稱的欄。
例如,我有四個 Sakila 資料庫的複本:
結果,當我在不使用 table_schema 的情況下執行查詢時,我得到的欄數為 51,這個數量偏高!
指定 table_schema 的欄數將更準確為 12:
如果現在在資料表設計器中開啟 film 資料表,我們可以確認 12 欄是正確的:
判斷欄是否存在
在動態應用程式中,你可能希望尋找有關欄的資訊,包括它是否存在。以下的查詢列出了「title」欄的每個實例和有關的中繼資料,包括其所屬的結構描述和資料表,以及預設值、資料類型和最大長度等詳細資料:
總結
在今天的文章中,我們學習了如何利用 INFORMATION_SCHEMA 資料庫來找出欄是否存在以及特定資料表有多少欄。
如果你對 Navicat Premium 感興趣,可以免費試用 14 天!