mysql中,information_schema初探

2020-10-19 22:00:33

1. 問題描述

在java開發中,與資料庫打交道是家常便飯。JDBC技術、基於JDBC封裝的工具類庫、基於JDBC封裝的框架是目前java運算元據庫的幾種主要方式。比較常見的基於JDBC封裝的工具類庫有:

  • Apache組織提供的Commons DbUtils,使用它能夠簡化JDBC應用程式的開發,並且,與原生的JDBC操作在效能上相差無異。
  • Spring框架中提供的SpringJDBC,該工具類庫封裝了基礎的JDBC操作,我們在使用時,不用去關注獲取驅動、建立連線、關閉連線等非業務操作,可以更加專注於業務邏輯的實現。
  • 源於Apache組織的一個開源專案iBaits,2010年遷移到google code,並且改名為MyBatis。MyBitis是一個持久層的框架。它支援客製化SQL、儲存過程和高階對映 ;同時,避免了幾乎所有的JDBC程式碼、手動設定引數和獲取結果集的重複性工作。
    那麼,在熟悉這些工具類庫和框架基本的使用之後,可能會關注工具類庫和框架的高階特性,在必要時,對相關功能進行擴充套件。當然,擴充套件之前,需要閱讀相關工具類庫和框架的原始碼,有助於對編碼風格和底層實現有所瞭解,方便擴充套件的時候,借鑑之用。
    而在此之前,探索資料庫中的一些後設資料資訊,將有助於後續相關工具類庫和框架的原始碼的閱讀。
    下面將對mysql中,information_schema資訊庫進行探索。如圖1所示,為DG使用者端顯示的mysql伺服器中包括的基本資料庫,其中,information_schema已用紅框標識。
    在這裡插入圖片描述
圖1 mysql中包括的基本資料庫

2. information_schema初探

mysql中,information_schema是一個資訊庫,用於存放關於mysql伺服器所維護的所有其他資料庫的後設資料資訊,如資料庫名、資料表名、列名(資料表中的)、存取許可權等。
information_schema資料庫中,包括瞭如圖2所示的後設資料資訊表。
在這裡插入圖片描述

圖2 information_schema資料庫中,包括的後設資料資訊表

下面,對該資料庫中常用的後設資料資訊表進行介紹。

2.1 SCHEMATA表

該表提供了當前mysql範例中所有資料庫的資訊。如圖3所示。show databases的結果取之此表。
在這裡插入圖片描述

圖3 SCHEMATA儲存的詳細資訊圖

2.2 TABLES表

該表提供了關於資料庫中的表(包括檢視)的資訊。詳細記錄了資料庫中某個表屬於哪個資料庫(SCHEMA),表的名字,表的型別(基本表、檢視),表的引擎,版本、行的格式、表的行數、平均行長度、資料長度、索引長度、建立時間、更新時間、校驗和、表建立選項、建立表註釋等資訊。如圖4所示。show tables from schemaname的結果取之此表。
在這裡插入圖片描述

圖4 TABLES表中,儲存的相關資訊

2.3 COLUMNS表

該表提供了資料庫的表中的列資訊。詳細記錄了某張表的所有列以及每個列的資訊,具體包括:某一個列所在資料庫、所在表、列名、是否可空、資料型別、最大字元長度、數值精度、字元編碼、列型別,等。如圖5所示。show columns from schemaname.tablename的結果取之此表。
在這裡插入圖片描述

圖5 COLUMNS表中,儲存的相關資訊

2.4 STATISTICS表

該表提供了關於表索引的資訊,具體包括:索引的表的資料庫名、表名、索引名、列名、索引型別、註釋,等。如圖6所示。是show index from schemaname.tablename的結果取之此表。
在這裡插入圖片描述

圖6 STATISTICS表中,儲存的相關資訊

2.5 USER_PRIVILEGES表

該表給出了關於使用者許可權的相關資訊,具體包括:被授權者(角色)、授權型別、是否可傳遞授權等。如圖7所示。該資訊源自mysql.user授權表。是非標準表。
在這裡插入圖片描述

圖7 USER_PRIVILEGES表中,儲存的相關資訊

2.6 SCHEMA_PRIVILEGES表

該表給出了關於資料庫許可權的資訊,具體包括:被授權角色、資料庫名字、授權型別、是否可傳遞授權。如圖8所示。該資訊來自mysql.db授權表。是非標準表。
在這裡插入圖片描述

圖8 SCHEMA_PRIVILEGES表中,儲存的相關資訊

2.7 TABLE_PRIVILEGES表

該表給出了關於表許可權的資訊,具體包括:被授權角色、資料庫名、表名、許可權型別、是否可被傳遞授權。如圖9所示。該資訊源自mysql.tables_priv授權表。是非標準表。
在這裡插入圖片描述

圖9 TABLE_PRIVILEGES表中,儲存的相關資訊

2.8 COLUMN_PRIVILEGES表

該表給出了關於列許可權的資訊,具體包括:被授權角色、資料庫、表名、列名、授權型別、是否可被傳遞授權。如圖10所示。該資訊源自mysql.columns_priv授權表。是非標準表。
在這裡插入圖片描述

圖10 COLUMN_PRIVILEGES表中,儲存的相關資訊

2.9 CHARACTER_SETS表

該表提供了mysql範例可用字元集的資訊,具體包括:字元集名字、預設校核對照名字、描述、最大長度。如圖11所示。是SHOW CHARACTER SET結果集取之此表。
在這裡插入圖片描述

圖11 CHARACTER_SETS表中,儲存的相關資訊

2.10 COLLATIONS表

該表提供了關於各字元集的對照資訊,具體包括:校核名字、字元編碼名字、是否預設值等。如圖12所示。
在這裡插入圖片描述

圖12 COLLATIONS表中,儲存的相關資訊

2.11 COLLATION_CHARACTER_SET_APPLICABILITY

該表指明瞭可用於校對的字元集。這些列等效於SHOW COLLATION的前兩個顯示欄位。如圖13所示。
在這裡插入圖片描述

圖13 COLLATION_CHARACTER_SET_APPLICABILITY表中,儲存的相關資訊

2.12 TABLE_CONSTRAINTS表

該表描述了存在約束的表。以及表的約束型別。具體包括:約束的資料庫、約束名、表名、約束型別等。如圖14所示。
在這裡插入圖片描述

圖14 TABLE_CONSTRAINTS表中,儲存的相關資訊

2.13 KEY_COLUMN_USAGE表

該表描述了具有約束的鍵列。具體包括:約束所在資料庫、約束名、表名、列名、在唯一約束裡面的位置、參照的資料庫名、參照的表名、參照的列名等。如圖15所示。
在這裡插入圖片描述

圖15 KEY_COLUMN_USAGE表中,儲存的相關資訊

2.14 ROUTINES表

該表提供了關於儲存子程式(儲存程式和函數)的資訊。此時,ROUTINES表不包含自定義函數(UDF)。名為「mysql.proc name」的列指明瞭對應於INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。具體包括:子程式所在資料庫、子程式型別、資料型別、字元最大長度、數位精度、字元編碼名字、字元校核名字、子程式體型別、子程式定義文字、安全型別、建立時間、最後更改時間、sql語句模式、子程式備註、子程式定義角色等。如圖16所示。
在這裡插入圖片描述

圖16 ROUTINES表中,儲存的相關資訊

2.15 VIEWS表

該表給出了關於資料庫中的檢視的資訊。需要有show views許可權,否則無法檢視檢視資訊。具體包括:所在資料庫、表名、檢視定義文字、核查選項、是否可更新、檢視定義角色、安全型別、字元集、校核字元集等。如圖17所示。
在這裡插入圖片描述

圖17 VIEWS表中,儲存的相關資訊

2.16 TRIGGERS表

該表提供了關於觸發程式的資訊。必須有super許可權才能檢視該表。具體包括:觸發器所在資料庫、觸發器名字、觸發條件、觸發器內容、建立時間、sql模式、建立角色等。如圖18所示。
在這裡插入圖片描述

圖18 TRIGGERS表中,儲存的相關資訊

2.17 information_schema中其他的後設資料表

該資料庫中其他的資訊表,在此不再描述。

3. 參考資源

(1) MYSQL中information_schema簡介
(2) MySQL預設資料庫之 information_schema庫