2.1 schemata(mysql服務器中所有數據庫信息的表)
2.3 columns表(mysql服務器所有列信息的表)
2.4 statistics表
2.5 user_privileges(用戶權限表)
2.6 schema_privileges(方案/數據庫權限表)
2.7 table_privileges(表權限表)
2.8 column_privileges(列權限表)
2.9 character_sets(字符集表)
2.10 collations(字符集的對照信息表)
2.11 collation_character_set_applicability表
2.12 table_constraints(存在約束的表的約束信息)
2.13 key_column_usage表(描述了具有約束的鍵列)
2.14 routines(mysql服務器中存儲過程和函數信息)
2.15 views(視圖表)
2.16 triggers(觸發器表)
大家在安裝或使用MYSQL時,會發現除了自己安裝的數據庫以外,還有一個 information_schema數據庫。information_schema數據庫是MySQL自帶的,它提供了訪問數據庫元數據的方式。元數據是關於數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。有些時候用於表述該信息的其他術語包括“數據詞典”和“系統目錄”。
information_schema是信息數據庫,其中保存着關於mysql服務器所維護的所有其他數據庫的信息。在information_schema中,有數個只讀表。它們實際上是視圖,而不是基本表,因此,你將無法看到與之相關的任何文件,也就是information_schema說一個虛擬數據庫,物理上並不存在。具體看下圖:
事實上,盡管不需要生成名為information_schema的文件,我們仍提供了名為information_schema的新數據庫。可以使用USE語句將information_schema選擇為默認數據庫,但訪問該數據庫中所含表的唯一方式是使用SELECT語句。不能在其中插入內容,不能更新它們,也不能刪除其中的內容
每位MySQL用戶均有權訪問這些表,但僅限於表中的特定行,在這類行中含有用戶具有恰當訪問權限的對象
與SHOW相比,SELECT的優點
SELECT ... FROM information_schema語句的目的在於提供一種更為一致的方式,以訪問MySQL所支持的各種SHOW語句(SHOW DATABASES、SHOW TABLES等等)提供的信息。與SHOW相比,使用SELECT有多項優點“
· 符合Codd規則。也就是說,所有訪問均是在表上進行的。
· 不需要了解新語句的語法。由於他們已知道SELECT的工作方式,僅需了解對象名即可。
· 實現人無需操心增加關鍵詞方面的事宜。
· 有數百萬種可能的輸出變化,而不是一種。這樣,就為對元數據有不同需求的應用程序提供了更高的靈活性。
· 由於其他DBMS也采用了這類方式,移植更為容易。
然而,由於SHOW在MySQL的雇員和用戶中十分流行,如果SHOW消失,可能會導致混亂,因此傳統的語法方式無法給出消除SHOW的足夠理由。事實上,在MySQL 5.1中,還對SHOW進行了多項增強。關於這方面的介紹,請參見“SHOW語句的擴展”。
schemata表提供了當前mysql實例中所有數據庫的信息。show databases的結果取之此表。該表對應的列說明如下:
列名 | 中文解釋 | 例子 |
catalog_name | ||
schema_name | 數據庫名 | |
default_character_set_name | 數據庫默認編碼 | utf8 |
default_collation_name | utf8_general_ci | |
sql_path | null |
注釋:SQL_PATH列的之總為NULL。
下述語句是等效的:
select schema_name as `database`
from information_schema.schemata
[where schema_name like 'db_ca_ods']
show databases
[like 'db_ca_ods']
tables表提供了關於數據庫中的表的信息(包括視圖)。詳細表述了某個表屬於哪個schema,表類型,表引擎,創建時間等信息。是show tables from db_ca_ods;【注db_ca_ods為數據庫名】的結果取之此表。
列名 | 中文解釋 | 例子/說明 |
table_catalog | NULL | |
table_schema | 數據庫名稱 | information_schema |
table_name | 表名 | tables表,屬於information_schema數據庫 |
table_type | 表類型 | 應是BASE TABLE(基本表)或VIEW(視圖)。如果表是臨時性的,TABLE_TYPE = TEMPORARY。(沒有臨時視圖,因此,因此不存在歧義) |
engine | 表所用引擎 | InnoDB |
version | Version |
|
row_format |
Row_format |
|
table_rows |
表中總行數 |
|
avg_row_length |
Avg_row_length |
|
data_length |
Data_length |
|
max_data_length |
Max_data_length |
|
index_length |
Index_length |
|
data_free |
Data_free |
|
auto_increment |
Auto_increment |
|
create_time |
Create_time |
|
update_time |
Update_time |
|
check_time |
Check_time |
|
table_collation |
Collation |
|
checksum |
Checksum |
|
create_options |
Create_options |
|
table_comment |
Comment |
表的說明,及create語句中comment的值 |
下述語句是等效的:
select table_name from information_schema.tables
[where table_schema = 'db_name']
[where|and table_name like 'wild']
show tables
[from db_name]
[like 'wild']
- 查看某個數據庫表的記錄數。
select table_schema,table_name,table_rows from tables where TABLE_SCHEMA = '數據庫名稱' order by table_rows desc;
- 查看數據庫所占空間
select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB, concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB from information_schema.tables where table_schema='數據庫名';
- 查看某個表所占空間
select concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size, concat(truncate(sum(max_data_length)/1024/1024,2),'MB') as max_data_size, concat(truncate(sum(data_free)/1024/1024,2),'MB') as data_free, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size from information_schema.tables where TABLE_NAME = '表名';
columns表提供了表中的列信息。詳細表述了某張表的所有列以及每個列的信息。是show columns from schemaname(數據庫名).tablename(表名)的結果取之此表。
statistics表:提供了關於表索引的信息。是show index from schemaname.tablename的結果取之此表
查詢數據庫中所有的索引: SELECT CONCAT('ALTER TABLE `',TABLE_NAME,'` ', 'ADD ', IF(NON_UNIQUE = 1, CASE UPPER(INDEX_TYPE) WHEN 'FULLTEXT' THEN 'FULLTEXT INDEX' WHEN 'SPATIAL' THEN 'SPATIAL INDEX' ELSE CONCAT('INDEX `', INDEX_NAME, '` USING ', INDEX_TYPE ) END, IF(UPPER(INDEX_NAME) = 'PRIMARY', CONCAT('PRIMARY KEY USING ', INDEX_TYPE ), CONCAT('UNIQUE INDEX `', INDEX_NAME, '` USING ', INDEX_TYPE ) ) ),'(', GROUP_CONCAT(DISTINCT CONCAT('`', COLUMN_NAME, '`') ORDER BY SEQ_IN_INDEX ASC SEPARATOR ', '), ');') AS 'Show_Add_Indexes' FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'db_ods' -- 數據庫名稱 GROUP BY TABLE_NAME, INDEX_NAME ORDER BY TABLE_NAME ASC, INDEX_NAME ASC; 下述語句是等效的: select * from information_schema.statistics where table_name = 'tbl_name' [and table_schema = 'db_name'] show index from tbl_name [from db_name]
user_privileges(用戶權限)表給出了關於全程權限的信息。該信息源自mysql.user授權表。是非標准表
列名 | 中文解釋 | 例子/說明 |
grantee | 例如“user'@'host” | |
table_catalog | ||
privilege_type | 權限類型 | 例如:select、drop等 |
is_grantable | 是否授權,即是否擁有“將此權限賦予其他用戶”的權限,對應mysql.user表中的grant_priv字段 | 例如:YES或NO |
實例如下:
2.6 schema_privileges表(方案/數據庫權限表)
schema_privileges(方案權限)表給出了關於方案(數據庫)權限的信息。該信息來自mysql.db授權表。是非標准表
列名 | 中文解釋 | 例子/說明 |
grantee | 例“user'@'host” | |
table_catalog | ||
table_schema | 數據庫名 | |
privilege_type | 權限類型 | |
is_grantable | 是否授權 | 例如:YES或NO |
table_privileges(表權限)表給出了關於表權限的信息。該信息源自mysql.tables_priv授權表。是非標准表
column_privileges(列權限)表給出了關於列權限的信息。該信息源自mysql.columns_priv授權表。是非標准表。
character_sets(字符集)表提供了mysql實例可用字符集的信息。是show character set結果集取之此表。
collations表提供了關於各字符集的對照信息。
2.11 collation_character_set_applicability表
collation_character_set_applicability表指明了可用於校對的字符集。這些列等效於show collation的前兩個顯示字段。
2.12 table_constraints表(存在約束的表的約束信息)
table_constraints表描述了存在約束的表。以及表的約束類型。
2.13 key_column_usage表(描述了具有約束的鍵列)
key_column_usage表描述了具有約束的鍵列。
2.14 routines表(mysql服務器中存儲過程和函數信息)
routines表提供了關於存儲子程序(存儲程序和函數)的信息。此時,routines表不包含自定義函數(udf)。名為“mysql.proc name”的列指明了對應於information_schema.routines表的mysql.proc表列。
views表給出了關於數據庫中的視圖的信息。需要有show views權限,否則無法查看視圖信息。
triggers表提供了關於觸發程序的信息。必須有super權限才能查看該表