Information_Schema系统表
?
? ??information_schema數(shù)據(jù)庫是MySQL自帶的,它提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。 ? ?
? ??元數(shù)據(jù)是關于數(shù)據(jù)的數(shù)據(jù),如數(shù)據(jù)庫名或表名,列的數(shù)據(jù)類型,或訪問權限等。有些時候用于表述該信息的其他術語包括“數(shù)據(jù)詞典”和“系統(tǒng)目錄”。
? ??在 MySQL中,把 information_schema 看作是一個數(shù)據(jù)庫,確切說是信息數(shù)據(jù)庫。
? ??其中保存著關于MySQL服務器所維護的所有其他數(shù)據(jù)庫的信息。如數(shù)據(jù)庫名,數(shù)據(jù)庫的表,表欄的數(shù)據(jù)類型與訪問權限等。
? ??在INFORMATION_SCHEMA中,有數(shù)個只讀表。它們實際上是視圖,不是基本表,因此,你將無法看到與之相關的任何文件。
?
?
information_schema數(shù)據(jù)庫表說明:
?
SCHEMATA表:
????提供了當前mysql實例中所有數(shù)據(jù)庫的信息。是show databases的結果取之此表。
TABLES表:
????提供了關于數(shù)據(jù)庫中的表的信息(包括視圖)。詳細表述了某個表屬于哪個schema,表類型,表引擎,創(chuàng)建時間等信息。是show tables from schemaname的結果取之此表。
COLUMNS表:
????提供了表中的列信息。詳細表述了某張表的所有列以及每個列的信息。是show columns from schemaname.tablename的結果取之此表。
STATISTICS表:
????提供了關于表索引的信息。是show index from schemaname.tablename的結果取之此表。
USER_PRIVILEGES(用戶權限)表:
????給出了關于全程權限的信息。該信息源自mysql.user授權表。是非標準表。
SCHEMA_PRIVILEGES(方案權限)表:
????給出了關于方案(數(shù)據(jù)庫)權限的信息。該信息來自mysql.db授權表。是非標準表。
TABLE_PRIVILEGES(表權限)表:
????給出了關于表權限的信息。該信息源自mysql.tables_priv授權表。是非標準表。
COLUMN_PRIVILEGES(列權限)表:
????給出了關于列權限的信息。該信息源自mysql.columns_priv授權表。是非標準表。
CHARACTER_SETS(字符集)表:
????提供了mysql實例可用字符集的信息。是SHOW CHARACTER SET結果集取之此表。
COLLATIONS表:
????提供了關于各字符集的對照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表:
????指明了可用于校對的字符集。這些列等效于SHOW COLLATION的前兩個顯示字段。
TABLE_CONSTRAINTS表:
????描述了存在約束的表。以及表的約束類型。
KEY_COLUMN_USAGE表:
????描述了具有約束的鍵列。
ROUTINES表:
????提供了關于存儲子程序(存儲程序和函數(shù))的信息。此時,ROUTINES表不包含自定義函數(shù)(UDF)。名為“mysql.proc name”的列指明了對應于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表:
????給出了關于數(shù)據(jù)庫中的視圖的信息。需要有show views權限,否則無法查看視圖信息。
TRIGGERS表:
????提供了關于觸發(fā)程序的信息。必須有super權限才能查看該表。
?
?
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| INNODB_CMP_RESET |
| INNODB_TRX |
| INNODB_CMPMEM_RESET |
| INNODB_LOCK_WAITS |
| INNODB_CMPMEM |
| INNODB_CMP |
| INNODB_LOCKS |
+---------------------------------------+
?
?
?
?
例如:
mysql> SELECT table_name, table_type, engine-> FROM information_schema.tables-> WHERE table_schema = 'db5'-> ORDER BY table_name DESC;| ?table_name(表名) | ?table_type(表類型) | ?引擎 |
| ?v56? | ?VIEW(視圖) | ?NULL |
| ?v3 | VIEW(視圖) | ?NULL |
| ?v2 | VIEW(視圖) | ?NULL |
| ?v | VIEW(視圖) | ?NULL |
| ?tables | ?BASE TABLE(基本表) | ?MyISAM |
| ?t7 | ?BASE TABLE(基本表) | ?MyISAM |
| ?t3 | ?BASE TABLE(基本表) | ?MyISAM |
| ?t2 | ?BASE TABLE(基本表) | ?MyISAM |
| ?t | ?BASE TABLE(基本表) | ?MyISAM |
| ?pk | ?BASE TABLE(基本表) | ?InnoDB |
| ?loop | ?BASE TABLE(基本表) | ?MyISAM |
| ?kurs | ?BASE TABLE(基本表) | ?MyISAM |
| ?k | ?BASE TABLE(基本表) | ?MyISAM |
| ?into | ?BASE TABLE(基本表) | ?MyISAM |
| ?goto | ?BASE TABLE(基本表) | ?MyISAM |
| ?fk2? | ?BASE TABLE(基本表) | ?InnoDB |
| ?fk | ?BASE TABLE(基本表) | ?InnoDB ? |
解釋:該語句請求按逆向字母順序列出數(shù)據(jù)庫db5中的所有表,但僅顯示三種信息:表名,表類型,以及表引擎。集合中含17行(0.01秒)。
INFORMATION_SCHEMA是信息數(shù)據(jù)庫,其中保存著關于MySQL服務器所維護的所有其他數(shù)據(jù)庫的信息。在INFORMATION_SCHEMA中,有數(shù)個只讀表。它們實際上是視圖,而不是基本表,因此,你將無法看到與之相關的任何文件。
每位MySQL用戶均有權訪問這些表,但僅限于表中的特定行,在這類行中含有用戶具有恰當訪問權限的對象。
SELECT的優(yōu)點:
SELECT ... FROM INFORMATION_SCHEMA語句的目的在于提供一種更為一致的方式,以訪問MySQL所支持的各種SHOW語句(SHOW DATABASES、SHOW TABLES等等)提供的信息。與SHOW相比,使用SELECT有多項優(yōu)點“
? ? 符合Codd規(guī)則。也就是說,所有訪問均是在表上進行的。? ? 不需要了解新語句的語法。由于他們已知道SELECT的工作方式,僅需了解對象名即可。? ? 實現(xiàn)人無需操心增加關鍵詞方面的事宜。? ? 有數(shù)百萬種可能的輸出變化,而不是一種。這樣,就為對元數(shù)據(jù)有不同需求的應用程序提供了更高的靈活性。? ? 由于其他DBMS也采用了這類方式,移植更為容易。
然而,由于SHOW在MySQL的雇員和用戶中十分流行,如果SHOW消失,可能會導致混亂,因此傳統(tǒng)的語法方式無法給出消除SHOW的足夠理由。事實上,在MySQL 5.1中,還對SHOW進行了多項增強。
標準:
在MySQL中,INFORMATION_SCHEMA表結構的實施遵從“ANSI/ISO SQL:2003標準,第11部分綱要。我們的目的在于,獲得與SQL:2003核心特性F021“基本信息方案”的近似兼容。
SQL服務器2000(也遵從該標準)的用戶可能已注意到它們高度的相似性。但是,MySQL略去了與我們的實施方式不相關的眾多列,并添加了一些MySQL特有的列。其中一種列就是INFORMATION_SCHEMA.TABLES表中的引擎列。
盡管其他DBMS使用了不同的名稱,如syscat或系統(tǒng),但標準名稱是INFORMATION_SCHEMA。
事實上,盡管不需要生成名為INFORMATION_SCHEMA的文件,我們?nèi)蕴峁┝嗣麨镮NFORMATION_SCHEMA的新數(shù)據(jù)庫。可以使用USE語句將INFORMATION_SCHEMA選擇為默認數(shù)據(jù)庫,但訪問該數(shù)據(jù)庫中所含表的唯一方式是使用SELECT語句。不能在其中插入內(nèi)容,不能更新它們,也不能刪除其中的內(nèi)容。
權限:
當前權限(SHOW)要求和SELCET權限要求不存在差別。在任何一種情況下,要想查看關于它的信息,需要對某類對象擁有特定權限。
?
我們選擇INFORMATION_SCHEMA中的表和列。對于每一列,有三類信息:
? ? “標準名稱”:指明了列的標準SQL名稱。 ? ? “SHOW 名稱”:指明了最近SHOW語句中的等效字段名,如果有的話。? ? “注釋”給出了適用的附加信息。
為了避免使用標準或DB2、SQL服務器或Oracle中保留的名稱,我們更改了標注為“SQL擴展”的列名。(例如,在TABLES表中,我們將COLLATION改為TABLE_COLLATION)。請參見本文末尾處給出的保留字列表。
字符列(例如TABLES.TABLE_NAME)定義通常是VARCHAR(N) CHARACTER SET utf8,其中,N至少為64。
在每一部分中,指明了等效于從INFORMATION_SCHEMA中檢索信息的SELECT語句的SHOW語句,或者不存在這類語句。
注釋:目前,有一些丟失的列和一些混亂的列。我們正在著手解決該問題,并隨著變化情況更新文檔。
?
?
?
?
?
INFORMATION_SCHEMA SCHEMATA表
該方案是數(shù)據(jù)庫,因此SCHEMATA表提供了關于數(shù)據(jù)庫的信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| CATALOG_NAME | - | NULL |
| SCHEMA_NAME | ? | Database |
| DEFAULT_CHARACTER_SET_NAME | ? | ? |
| DEFAULT_COLLATION_NAME | ? | ? |
| SQL_PATH | ? | NULL |
注釋:SQL_PATH列的之總為NULL。
下述語句是等效的:
SELECT SCHEMA_NAME AS `DatabaseFROM INFORMATION_SCHEMA.SCHEMATA[WHERE SCHEMA_NAME LIKE 'wild']?SHOW DATABASES[LIKE 'wild']?
INFORMATION_SCHEMA TABLES表
TABLES表給出了關于數(shù)據(jù)庫中的表的信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | Table_... | ? |
| TABLE_NAME | Table_... | ? |
| TABLE_TYPE | ? | ? |
| ENGINE | Engine | MySQL擴展 |
| VERSION | Version | MySQL擴展 |
| ROW_FORMAT | Row_format | MySQL擴展 |
| TABLE_ROWS | Rows | MySQL擴展 |
| AVG_ROW_LENGTH | Avg_row_length | MySQL擴展 |
| DATA_LENGTH | Data_length | MySQL擴展 |
| MAX_DATA_LENGTH | Max_data_length | MySQL擴展 |
| INDEX_LENGTH | Index_length | MySQL擴展 |
| DATA_FREE | Data_free | MySQL擴展 |
| AUTO_INCREMENT | Auto_increment | MySQL擴展 |
| CREATE_TIME | Create_time | MySQL擴展 |
| UPDATE_TIME | Update_time | MySQL擴展 |
| CHECK_TIME | Check_time | MySQL擴展 |
| TABLE_COLLATION | Collation | MySQL擴展 |
| CHECKSUM | Checksum | MySQL擴展 |
| CREATE_OPTIONS | Create_options | MySQL擴展 |
| TABLE_COMMENT | Comment | MySQL擴展 |
注釋:
? ? TABLE_SCHEMA和TABLE_NAME是SHOW顯示中的單個字段,例如Table_in_db1。
? ? TABLE_TYPE(表類型)應是BASE TABLE(基本表)或VIEW(視圖)。如果表是臨時性的,TABLE_TYPE?=?TEMPORARY。(沒有臨時視圖,因此,因此不存在歧義)。
? ? 如果表位于INFORMATION_SCHEMA數(shù)據(jù)庫中,TABLE_ROWS列為NULL。對于InnoDB表,在SQL優(yōu)化中,行計數(shù)僅是大概估計值。
? ? 沒有關于表默認字符集的任何信息。TABLE_COLLATION處于關閉狀態(tài),原因在于校對名稱以字符集名稱開頭。
下述語句是等效的:
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']?
INFORMATION_SCHEMA COLUMNS表
COLUMNS表給出了表中的列信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| COLUMN_NAME | Field | ? |
| ORDINAL_POSITION | ? | 參見注釋 |
| COLUMN_DEFAULT | Default | ? |
| IS_NULLABLE | Null | ? |
| DATA_TYPE | Type | ? |
| CHARACTER_MAXIMUM_LENGTH | Type | ? |
| CHARACTER_OCTET_LENGTH | ? | ? |
| NUMERIC_PRECISION | Type | ? |
| NUMERIC_SCALE | Type | ? |
| CHARACTER_SET_NAME | ? | ? |
| COLLATION_NAME | Collation | ? |
| COLUMN_TYPE | Type | MySQL擴展 |
| COLUMN_KEY | Key | MySQL擴展 |
| EXTRA | Extra | MySQL擴展 |
| COLUMN_COMMENT | Comment | MySQL擴展 |
注釋:
? ? 在SHOW中,類型顯示包括來自數(shù)個不同COLUMNS列的值。
? ? ORDINAL_POSITION有必要,這是因為,你可能會在某一天需要ORDER BY ORDINAL_POSITION(按ORDINAL_POSITION排序)。不同于SHOW,SELECT沒有自動排序功能。
? ? CHARACTER_OCTET_LENGTH應與CHARACTER_MAXIMUM_LENGTH相同,但多字節(jié)字符集除外。
? ? CHARACTER_SET_NAME可由Collation(校對)導出。例如,如果給出了“SHOW FULL COLUMNS FROM t”,在Collation(校對)列中將見到latin1_swedish_ci的值,字符集由第1個下劃線前的名稱指明。latin1.
下述語句是等效的:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT? FROM INFORMATION_SCHEMA.COLUMNS? WHERE table_name = 'tbl_name' ?[AND table_schema = 'db_name'] ?[AND column_name LIKE 'wild']SHOW COLUMNS ?FROM tbl_name? [FROM db_name]? [LIKE wild]?
INFORMATION_SCHEMA STATISTICS表
STATISTICS表給出了關于表索引的信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | =數(shù)據(jù)庫 |
| TABLE_NAME | Table | ? |
| NON_UNIQUE | Non_unique | ? |
| INDEX_SCHEMA | ? | =數(shù)據(jù)庫 |
| INDEX_NAME | Key_name | ? |
| SEQ_IN_INDEX | Seq_in_index | ? |
| COLUMN_NAME | Column_name | ? |
| COLLATION | Collation | ? |
| CARDINALITY | Cardinality | ? |
| SUB_PART | Sub_part | MySQL擴展 |
| PACKED | Packed | MySQL擴展 |
| NULLABLE | Null | MySQL擴展 |
| INDEX_TYPE | Index_type | MySQL擴展 |
| COMMENT | Comment | MySQL擴展 |
注釋:
? ? 沒有關于這些索引的標準表。上面的列表與SQL服務器2000中sp_statistics返回的值類似。不同之處在于用CATALOG替換了QUALIFIER,并用SCHEMA替換了OWNER。
顯而易見,前述表和SHOW INDEX的輸出均是由相同的父對象導出的。因此,相關性已關閉。
下述語句是等效的:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS? WHERE table_name = 'tbl_name' ?[AND table_schema = 'db_name']SHOW INDEX ?FROM tbl_name? [FROM db_name]?
INFORMATION_SCHEMA USER_PRIVILEGES表
USER_PRIVILEGES(用戶權限)表給出了關于全程權限的信息。該信息源自mysql.user授權表。
| 標準名稱 | SHOW名稱 | 注釋 |
| GRANTEE | ? | 例如“user'@'host” |
| TABLE_CATALOG | ? | NULL |
| PRIVILEGE_TYPE | ? | ? |
| IS_GRANTABLE | ? | ? |
注釋:
? ? 這是一個非標準表。其值來自mysql.user表。
?
INFORMATION_SCHEMA SCHEMA_PRIVILEGES表
SCHEMA_PRIVILEGES(方案權限)表給出了關于方案(數(shù)據(jù)庫)權限的信息。該信息來自mysql.db授權表。
| 標準名稱 | SHOW名稱 | 注釋 |
| GRANTEE | ? | 例如“user'@'host” |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | ? |
| PRIVILEGE_TYPE | ? | ? |
| IS_GRANTABLE | ? | ? |
注釋:
? ? 這是一個非標準表。其值來自mysql.db表。
?
INFORMATION_SCHEMA TABLE_PRIVILEGES表
TABLE_PRIVILEGES(表權限)表給出了關于表權限的信息。該信息源自mysql.tables_priv授權表。
| 標準名稱 | SHOW名稱 | 注釋 |
| GRANTEE | ? | 例如“user'@'host” |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| PRIVILEGE_TYPE | ? | ? |
| IS_GRANTABLE | ? | ? |
下述語句不等效:
SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGESSHOW GRANTS ...PRIVILEGE_TYPE可以包含這些值之一(僅能一個):SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE VIEW。
?
INFORMATION_SCHEMA COLUMN_PRIVILEGES表
COLUMN_PRIVILEGES(列權限)表給出了關于列權限的信息。該信息源自mysql.columns_priv授權表。
| 標準名稱 | SHOW名稱 | 注釋 |
| GRANTEE | ? | 例如“user'@'host” |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| COLUMN_NAME | ? | ? |
| PRIVILEGE_TYPE | ? | ? |
| IS_GRANTABLE | ? | ? |
注釋:
? ? 在SHOW FULL COLUMNS(顯示完整列)的輸出中,權限值位于一個字段并采用小寫形式,例如select、insert、update、references。在COLUMN_PRIVILEGES中,每種權限占一行,并為大寫形式。
? ? PRIVILEGE_TYPE可以包含這些值之一(僅能一個):SELECT,?INSERT,?UPDATE,?REFERENCES.
? ? 如果用戶有GRANT OPTION權限,那么IS_GRANTABLE應為YES。否則,IS_GRANTABLE應為NO。在輸出中,不會將GRANT OPTION作為單獨權限列出。
下述語句不等效:
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGESSHOW GRANTS ...?
INFORMATION_SCHEMA CHARACTER_SETS表
CHARACTER_SETS(字符集)表提供了關于可用字符集的信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| CHARACTER_SET_NAME | Charset | ? |
| DEFAULT_COLLATE_NAME | Default collation | ? |
| DESCRIPION | Description | MySQL擴展 |
| MAXLEN | Maxlen | MySQL擴展 |
注釋:
? ? 我們增加了兩個非標準列,分別對應于SHOW CHARACTER SET輸出的Description(描述)和Maxlen(最大長度)列。
下述語句是等效的:
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS? [WHERE name LIKE 'wild']SHOW CHARACTER SET? [LIKE 'wild']?
INFORMATION_SCHEMA COLLATIONS表
COLLATIONS表提供了關于各字符集的對照信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| COLLATION_NAME | Collation | ? |
注釋:
? ? 我們增加了5個非標準列,分別對應于SHOW COLLATION輸出的Charset、Id、Default、Compiled和Sortlen列。
下述語句是等效的:
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS? [WHERE collation_name LIKE 'wild']SHOW COLLATION? [LIKE 'wild']?
INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表
COLLATION_CHARACTER_SET_APPLICABILITY表指明了可用于校對的字符集。這些列等效于SHOW COLLATION的前兩個顯示字段。
| 標準名稱 | SHOW名稱 | 注釋 |
| COLLATION_NAME | Collation | ? |
| CHARACTER_SET_NAME | Charset | ? |
?
INFORMATION_SCHEMA TABLE_CONSTRAINTS表
TABLE_CONSTRAINTS表描述了存在約束的表。
| 標準名稱 | SHOW名稱 | 注釋 |
| CONSTRAINT_CATALOG | ? | NULL |
| CONSTRAINT_SCHEMA | ? | ? |
| CONSTRAINT_NAME | ? | ? |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| CONSTRAINT_TYPE | ? | ? |
注釋:
? ? CONSTRAINT_TYPE的值可以是UNIQUE(唯一)、PRIMARY KEY(主鍵)或FOREIGN KEY(外鍵)。
? ? 當Non_unique字段為0時,UNIQUE和PRIMARY KEY信息與SHOW INDEX輸出的Key_name字段中給出的信息基本相同。
? ? CONSTRAINT_TYPE列可包含下述值之一:UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK。這是一個CHAR(非ENUM)列。在我們支持CHECK前,CHECK值不可用。
?
INFORMATION_SCHEMA KEY_COLUMN_USAGE表
KEY_COLUMN_USAGE表描述了具有約束的鍵列。
| 標準名稱 | SHOW名稱 | 注釋 |
| CONSTRAINT_CATALOG | ? | NULL |
| CONSTRAINT_SCHEMA | ? | ? |
| CONSTRAINT_NAME | ? | ? |
| TABLE_CATALOG | ? | ? |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| COLUMN_NAME | ? | ? |
| ORDINAL_POSITION | ? | ? |
| POSITION_IN_UNIQUE_CONSTRAINT | ? | ? |
| REFERENCED_TABLE_SCHEMA | ? | ? |
| REFERENCED_TABLE_NAME | ? | ? |
| REFERENCED_COLUMN_NAME | ? | ? |
注釋:
? ? 如果約束為外鍵,這就是外鍵列,而不是外鍵引用的列。
? ? ORDINAL_POSITION的值是列在約束中的位置,而不是列在表中的位置。列位置采用從1開始的數(shù)值編號。
? ? 對于“唯一”和“主鍵”約束,POSITION_IN_UNIQUE_CONSTRAINT的值為NULL。對于“外鍵”約束,它是所引用表內(nèi)鍵中的順序位置。
例如,假定有兩個具有下述定義的表t1和t3:
CREATE TABLE t1( s1 INT, s2 INT, s3 INT, PRIMARY KEY(s3)) ENGINE=InnoDB;CREATE TABLE t3( s1 INT, s2 INT, s3 INT, KEY(s1), CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)) ENGINE=InnoDB;對于這兩個表,KEY_COLUMN_USAGE表有兩行:
? ? 一行含有CONSTRAINT_NAME='PRIMARY',?TABLE_NAME='t1',?COLUMN_NAME='s3',ORDINAL_POSITION=1,?POSITION_IN_UNIQUE_CONSTRAINT=NULL。
? ? 另一行含有CONSTRAINT_NAME='CO',?TABLE_NAME='t3',?COLUMN_NAME='s2',ORDINAL_POSITION=1,?POSITION_IN_UNIQUE_CONSTRAINT=1。
?
INFORMATION_SCHEMA ROUTINES表
ROUTINES表提供了關于存儲子程序(存儲程序和函數(shù))的信息。此時,ROUTINES表不包含自定義函數(shù)(UDF)。
名為“mysql.proc?name”的列指明了對應于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列,如果有的話。
| 標準名稱 | mysql.proc名 | 注釋 |
| SPECIFIC_NAME | specific_name | ? |
| ROUTINE_CATALOG | ? | NULL |
| ROUTINE_SCHEMA | db | ? |
| ROUTINE_NAME | name | ? |
| ROUTINE_TYPE | type | {PROCEDURE|FUNCTION} |
| DTD_IDENTIFIER | ? | (數(shù)據(jù)類型描述符) |
| ROUTINE_BODY | ? | SQL |
| ROUTINE_DEFINITION | body | ? |
| EXTERNAL_NAME | ? | NULL |
| EXTERNAL_LANGUAGE | language | NULL |
| PARAMETER_STYLE | ? | SQL |
| IS_DETERMINISTIC | is_deterministic | ? |
| SQL_DATA_ACCESS | sql_data_access | ? |
| SQL_PATH | ? | NULL |
| SECURITY_TYPE | security_type | ? |
| CREATED | created | ? |
| LAST_ALTERED | modified | ? |
| SQL_MODE | sql_mode | MySQL擴展 |
| ROUTINE_COMMENT | comment | MySQL擴展 |
| DEFINER | definer | MySQL擴展 |
注釋:
? ? MySQL計算EXTERNAL_LANGUAGE,因此:
? ? 如果mysql.proc.language='SQL',那么EXTERNAL_LANGUAGE為NULL。
? ? 否則,EXTERNAL_LANGUAGE為mysql.proc.language中的值。然而,由于尚沒有外部語言,因此該值總為NULL。
?
INFORMATION_SCHEMA VIEWS表
VIEWS表給出了關于數(shù)據(jù)庫中的視圖的信息。
| 標準名稱 | SHOW名稱 | 注釋 |
| TABLE_CATALOG | ? | NULL |
| TABLE_SCHEMA | ? | ? |
| TABLE_NAME | ? | ? |
| VIEW_DEFINITION | ? | ? |
| CHECK_OPTION | ? | ? |
| IS_UPDATABLE | ? | ? |
| DEFINER | ? | ? |
| SECURITY_TYPE | ? | ? |
注釋:
? ? 有一種新的權限SHOW VIEW,如果沒有它,將無法看到VIEWS表。
? ? VIEW_DEFINITION列含有你在SHOW CREATE VIEW所生成的Create Table字段中見到的大多數(shù)信息。跳過SELECT前的單詞,并跳過具有CHECK OPTION(檢查選項)的單詞。例如,如果初始語句是:
CREATE VIEW v AS SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1 WITH CHECK OPTION;那么視圖定義為:
SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1? ? CHECK_OPTION列的值總為NONE。
? ? 如果視圖是可更新的,IS_UPDATABLE列的值為YES,如果視圖是不可更新的,IS_UPDATABLE列的值為NO。
? ? DEFINER列指明了定義視圖的人。SECURITY_TYPE的值為DEFINER或INVOKER。
?
INFORMATION_SCHEMA TRIGGERS表
TRIGGERS表提供了關于觸發(fā)程序的信息。
必須有SUPER權限才能查看該表。
| 標準名稱 | SHOW名稱 | 注釋 |
| TRIGGER_CATALOG | ? | NULL |
| TRIGGER_SCHEMA | ? | ? |
| TRIGGER_NAME | Trigger | ? |
| EVENT_MANIPULATION | Event | ? |
| EVENT_OBJECT_CATALOG | ? | NULL |
| EVENT_OBJECT_SCHEMA | ? | ? |
| EVENT_OBJECT_TABLE | Table | ? |
| ACTION_ORDER | ? | 0 |
| ACTION_CONDITION | ? | NULL |
| ACTION_STATEMENT | Statement | ? |
| ACTION_ORIENTATION | ? | ROW |
| ACTION_TIMING | Timing | ? |
| ACTION_REFERENCE_OLD_TABLE | ? | NULL |
| ACTION_REFERENCE_NEW_TABLE | ? | NULL |
| ACTION_REFERENCE_OLD_ROW | ? | OLD |
| ACTION_REFERENCE_NEW_ROW | ? | NEW |
| CREATED | ? | NULL?(0) |
| SQL_MODE | ? | ? |
注釋:
? ? TRIGGER_SCHEMA和TRIGGER_NAME列中分別含有相應數(shù)據(jù)庫的名稱以及觸發(fā)程序的名稱,在該數(shù)據(jù)庫中,含有該觸發(fā)程序。
? ? EVENT_MANIPULATION列含有下述值之一:INSERT、DELETE、或UPDATE。
? ? 每個觸發(fā)程序均與一個表準確相關。EVENT_OBJECT_SCHEMA和EVENT_OBJECT_TABLE列包含相應的數(shù)據(jù)庫和表名,在該數(shù)據(jù)庫中,含有該表。
? ? ACTION_ORDER語句含有觸發(fā)程序動作(在相同表上所有類似觸發(fā)程序列表中)的順序位置。目前該值總為0,這是因為在相同表上具有相同EVENT_MANIPULATION和ACTION_TIMING的觸發(fā)程序不能超過1個。
? ? ACTION_STATEMENT列含有激活了觸發(fā)程序時將要執(zhí)行的語句。這與SHOW TRIGGERS輸出的Statement(語句)列中顯示的文本相同。注意,該文本采用了UTF-8編碼方式。
? ? ACTION_ORIENTATION列總含有值“ROW”。
? ? ACTION_TIMING列含有下述兩種值之一:“BEFORE”或“AFTER”。
? ? 列ACTION_REFERENCE_OLD_ROW和ACTION_REFERENCE_NEW_ROW分別含有舊的和新的列標識符。這意味著ACTION_REFERENCE_OLD_ROW總含有值“OLD”,ACTION_REFERENCE_NEW_ROW總含有值“NEW”。
? ? SQL_MODE列顯示了創(chuàng)建觸發(fā)程序時有效的服務器SQL模式(無論當前的服務器SQL模式為何,只要激活了觸發(fā)程序,它將保持有效)。該列的可能取值范圍與sql_mode系統(tǒng)變量的取值范圍相同。請參見5.3.2節(jié),“SQL服務器模式”。
? ? 在下述列中,目前總含有NULL:TRIGGER_CATALOG,EVENT_OBJECT_CATALOG,ACTION_CONDITION,ACTION_REFERENCE_OLD_TABLE,ACTION_REFERENCE_NEW_TABLE和CREATED。
例如,使用觸發(fā)器中定義的觸發(fā)程序ins_sum。
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS/G*************************** 1. row *************************** TRIGGER_CATALOG: NULL TRIGGER_SCHEMA: test TRIGGER_NAME: ins_sum? EVENT_MANIPULATION: INSERT EVENT_OBJECT_CATALOG: NULL EVENT_OBJECT_SCHEMA: test? EVENT_OBJECT_TABLE: account ACTION_ORDER: 0 ACTION_CONDITION: NULL ACTION_STATEMENT:? SET @sum = @sum + NEW.amount? ACTION_ORIENTATION: ROW ACTION_TIMING: BEFORE ACTION_REFERENCE_OLD_TABLE: NULL ACTION_REFERENCE_NEW_TABLE: NULL? ACTION_REFERENCE_OLD_ROW: OLD? ACTION_REFERENCE_NEW_ROW: NEW CREATED: NULL1 row in set (1.54 sec)?
其他INFORMATION_SCHEMA表
? ??我們打算實施附加的INFORMATION_SCHEMA表。尤其是,我們確認了對INFORMATION_SCHEMA.PARAMETERS和INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS的需求。 ? ?? ?
?
SHOW語句的擴展
某些SHOW語句的擴展伴隨著INFORMATION_SCHEMA的實施:
? ? SHOW可用于獲取關于INFORMATION_SCHEMA本身結構的信息。
? ? 一些SHOW語句允許使用WHERE子句,這樣,在指定需要顯示的行時,可更為靈活。
INFORMATION_SCHEMA是一種信息數(shù)據(jù)庫,因此,在SHOW DATABASES的輸出中,包含其名稱。與此類似,SHOW TABLES可與INFORMATION_SCHEMA一起使用,以獲取表清單。
mysql> SHOW TABLES FROM INFORMATION_SCHEMA;+---------------------------------------+| Tables_in_information_schema|+---------------------------------------+| SCHEMATA|| TABLES|| COLUMNS || CHARACTER_SETS || COLLATIONS? || COLLATION_CHARACTER_SET_APPLICABILITY || ROUTINES|| STATISTICS? || VIEWS || TRIGGERS|| USER_PRIVILEGES|| SCHEMA_PRIVILEGES? || TABLE_PRIVILEGES|| COLUMN_PRIVILEGES? || TABLE_CONSTRAINTS? || KEY_COLUMN_USAGE|+---------------------------------------+SHOW COLUMNS和DESCRIBE能夠顯示單獨INFORMATION_SCHEMA表中的列信息。
擴展了一些SHOW語句,允許使用WHERE子句:
SHOW CHARACTER SETSHOW COLLATIONSHOW COLUMNSSHOW DATABASESSHOW FUNCTION STATUSSHOW KEYSSHOW OPEN TABLESSHOW PROCEDURE STATUSSHOW STATUSSHOW TABLE STATUSSHOW TABLESSHOW VARIABLES如果有WHERE子句的話,將根據(jù)SHOW語句顯示的列名進行計算。例如,SHOW COLLATION語句可產(chǎn)生這些輸出列:
例如,SHOW CHARACTER SET語句可產(chǎn)生這些輸出列:
mysql> SHOW CHARACTER SET;| Charset | 描述 | 默認校對 | 最大長度 |
| ?big5 | ?Big5 Traditional Chinese | ?big5_chinese_ci | 2 |
| ?dec8 | ?DEC West European | ?dec8_swedish_ci | 1 |
| ?cp850 | ?DOS West European | ?cp850_general_ci | 1 |
| ?hp8 | ?HP West European | ?hp8_english_ci | 1 |
| ?koi8r | ?KOI8-R Relcom Russian | ?koi8r_general_ci | 1 |
| ?latin1 | ?cp1252 West European? | ?latin1_swedish_ci | 1 |
| ?latin2 | ?ISO 8859-2 Central European | ?latin2_general_ci | 1 |
要想與SHOW CHARACTER SET一起使用WHERE子句,應引用這些列名稱。例如,在下面的語句中,給出了用于默認校對且含有字符串“japanese”的字符集的信息:
mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';| ?Charset | ?描述?? | 默認校對 | 最大長度 |
| ?ujis | ?EUC-JP Japanese | ?ujis_japanese_ci | 3 |
| ?sjis | ?Shift-JIS Japanese? | ?sjis_japanese_ci | 2 |
| ?cp932 | ?SJIS for Windows Japanese | ?cp932_japanese_ci | 2 |
| ?eucjpms | ?UJIS for Windows Japanese | ?eucjpms_japanese_ci | 3 |
該語句顯示了多字節(jié)字符集。
mysql> SHOW CHARACTER SET WHERE Maxlen > 1;| ?Charset | ?描述? | 默認校對 | 最大長度 |
| ?big5 | ?Big5 Traditional Chinese? | ?big5_chinese_ci | 2 |
| ?ujis | ?EUC-JP Japanese | ?ujis_japanese_ci | 3 |
| ?sjis | ?Shift-JIS Japanese? | ?sjis_japanese_ci | 2 |
| ?euckr | ?EUC-KR Korean | ?euckr_korean_ci | 2 |
| ?gb2312? | ?GB2312 Simplified Chinese | ?gb2312_chinese_ci | 2 |
| ?gbk | ?GBK Simplified Chinese | ?gbk_chinese_ci | 2 |
| ?utf8 | ?UTF-8 Unicode | ?utf8_general_ci | 3 |
| ?ucs2 | ?UCS-2 Unicode | ?ucs2_general_ci | 2 |
| ?cp932 | ?SJIS for Windows Japanese | ?cp932_japanese_ci | 2 |
| ?eucjpms | ?UJIS for Windows Japanese | ?eucjpms_japanese_ci | 3 |
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/magina/p/4974209.html
總結
以上是生活随笔為你收集整理的Information_Schema系统表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十大排序算法图解
- 下一篇: Linux 内核获取、初次编译、源码目录