### 第23章:INFORMATION_SCHEMA信息數據庫
** 目錄**
[23.1. INFORMATION_SCHEMA表](#)[ 23.1.1. INFORMATION_SCHEMA SCHEMATA表](#)[ 23.1.2. INFORMATION_SCHEMA TABLES表](#)[ 23.1.3. INFORMATION_SCHEMA COLUMNS表](#)[ 23.1.4. INFORMATION_SCHEMA STATISTICS表](#)[ 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表](#)[ 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表](#)[ 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表](#)[ 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表](#)[ 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表](#)[ 23.1.10. INFORMATION_SCHEMA COLLATIONS表](#)[ 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表](#)[ 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表](#)[ 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表](#)[ 23.1.14. INFORMATION_SCHEMA ROUTINES表](#)[ 23.1.15. INFORMATION_SCHEMA VIEWS表](#)[ 23.1.16. INFORMATION_SCHEMA TRIGGERS表](#)[ 23.1.17. 其他INFORMATION_SCHEMA表](#)[ 23.2. SHOW語句的擴展``](#)
INFORMATION_SCHEMA提供了訪問數據庫元數據的方式。
元數據是關于數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。有些時候用于表述該信息的其他術語包括“數據詞典”和“系統目錄”。
例如:
~~~
mysql> SELECT table_name, table_type, engine
~~~
~~~
-> FROM information_schema.tables
~~~
~~~
-> WHERE table_schema = 'db5'
~~~
~~~
-> ORDER BY table_name DESC;
~~~
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0"><tr><td valign="top"> <pre>?table_name(表名)</pre> </td> <td valign="top"> <pre>?table_type(表類型)</pre> </td> <td valign="top"> <pre>?引擎</pre> </td> </tr><tr><td valign="top"> <pre>?v56? </pre> </td> <td valign="top"> <pre>?VIEW(視圖)</pre> </td> <td valign="top"> <pre>?NULL</pre> </td> </tr><tr><td valign="top"> <pre>?v3</pre> </td> <td valign="top"> <p><span>VIEW</span>(視圖)</p></td> <td valign="top"> <pre>?NULL</pre> </td> </tr><tr><td valign="top"> <pre>?v2</pre> </td> <td valign="top"> <p><span>VIEW</span>(視圖)</p></td> <td valign="top"> <pre>?NULL</pre> </td> </tr><tr><td valign="top"> <pre>?v</pre> </td> <td valign="top"> <p><span>VIEW</span>(視圖)</p></td> <td valign="top"> <pre>?NULL</pre> </td> </tr><tr><td valign="top"> <pre>?tables </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?t7</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?t3</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?t2</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?t</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?pk</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?InnoDB </pre> </td> </tr><tr><td valign="top"> <pre>?loop </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?kurs </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?k</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?into </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?goto </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?MyISAM </pre> </td> </tr><tr><td valign="top"> <pre>?fk2? </pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?InnoDB </pre> </td> </tr><tr><td valign="top"> <pre>?fk</pre> </td> <td valign="top"> <pre>?BASE TABLE(基本表)</pre> </td> <td valign="top"> <pre>?InnoDB </pre> </td> </tr></table>
~~~
集合中含17行(0.01秒)。
~~~
解釋:該語句請求按逆向字母順序列出數據庫db5中的所有表,但僅顯示三種信息:表名,表類型,以及表引擎。
INFORMATION_SCHEMA是信息數據庫,其中保存著關于MySQL服務器所維護的所有其他數據庫的信息。在INFORMATION_SCHEMA中,有數個只讀表。它們實際上是視圖,而不是基本表,因此,你將無法看到與之相關的任何文件。
每位MySQL用戶均有權訪問這些表,但僅限于表中的特定行,在這類行中含有用戶具有恰當訪問權限的對象。
**SELECT****的優點**
SELECT ... FROM INFORMATION_SCHEMA語句的目的在于提供一種更為一致的方式,以訪問MySQL所支持的各種SHOW語句(SHOW DATABASES、SHOW TABLES等等)提供的信息。與SHOW相比,使用SELECT有多項優點“
·???????? 符合Codd規則。也就是說,所有訪問均是在表上進行的。
·???????? 不需要了解新語句的語法。由于他們已知道SELECT的工作方式,僅需了解對象名即可。
·???????? 實現人無需操心增加關鍵詞方面的事宜。
·???????? 有數百萬種可能的輸出變化,而不是一種。這樣,就為對元數據有不同需求的應用程序提供了更高的靈活性。
·???????? 由于其他DBMS也采用了這類方式,移植更為容易。
[然而,由于SHOW在MySQL的雇員和用戶中十分流行,如果SHOW消失,可能會導致混亂,因此傳統的語法方式無法給出消除SHOW的足夠理由。事實上,在MySQL 5.1中,還對SHOW進行了多項增強。關于這方面的介紹,請參見]()[23.2節,“SHOW語句的擴展``”](# "23.2.?Extensions to SHOW Statements")。
**標準**
在MySQL中,INFORMATION_SCHEMA表結構的實施遵從“ANSI/ISO SQL:2003標準,第11部分*綱要*”。我們的目的在于,獲得與SQL:2003核心特性F021“基本信息方案”的近似兼容。
SQL服務器2000(也遵從該標準)的用戶可能已注意到它們高度的相似性。但是,MySQL略去了與我們的實施方式不相關的眾多列,并添加了一些MySQL特有的列。其中一種列就是INFORMATION_SCHEMA.TABLES表中的引擎列。
盡管其他DBMS使用了不同的名稱,如syscat或系統,但標準名稱是INFORMATION_SCHEMA。
事實上,盡管不需要生成名為INFORMATION_SCHEMA的文件,我們仍提供了名為INFORMATION_SCHEMA的新數據庫。可以使用USE語句將INFORMATION_SCHEMA選擇為默認數據庫,但訪問該數據庫中所含表的唯一方式是使用SELECT語句。不能在其中插入內容,不能更新它們,也不能刪除其中的內容。
**權限**
當前權限(SHOW)要求和SELCET權限要求不存在差別。在任何一種情況下,要想查看關于它的信息,需要對某類對象擁有特定權限。
### 23.1.?INFORMATION_SCHEMA表
[ 23.1.1. INFORMATION_SCHEMA SCHEMATA表](#)[ 23.1.2. INFORMATION_SCHEMA TABLES表](#)[ 23.1.3. INFORMATION_SCHEMA COLUMNS表](#)[ 23.1.4. INFORMATION_SCHEMA STATISTICS表](#)[ 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表](#)[ 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表](#)[ 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表](#)[ 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表](#)[ 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表](#)[ 23.1.10. INFORMATION_SCHEMA COLLATIONS表](#)[ 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表](#)[ 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表](#)[ 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表](#)[ 23.1.14. INFORMATION_SCHEMA ROUTINES表](#)[ 23.1.15. INFORMATION_SCHEMA VIEWS表](#)[ 23.1.16. INFORMATION_SCHEMA TRIGGERS表](#)[ 23.1.17. 其他INFORMATION_SCHEMA表](#)
**下述章節說明**
在下面的章節中,我們選擇了INFORMATION_SCHEMA中的表和列。對于每一列,有三類信息:
·???????? “標準名稱”:指明了列的標準SQL名稱。
·???????? “SHOW名稱”:指明了最近SHOW語句中的等效字段名,如果有的話。
·???????? “注釋”給出了適用的附加信息。
為了避免使用標準或DB2、SQL服務器或Oracle中保留的名稱,我們更改了標注為“SQL擴展”的列名。(例如,在TABLES表中,我們將COLLATION改為TABLE_COLLATION)。請參見本文末尾處給出的保留字列表。[http://www.dbazine.com/gulutzan5.shtml](http://www.dbazine.com/gulutzan5.shtml)。
字符列(例如TABLES.TABLE_NAME)定義通常是VARCHAR(*N*) CHARACTER SET utf8,其中,N至少為64。
在每一部分中,指明了等效于從INFORMATION_SCHEMA中檢索信息的SELECT語句的SHOW語句,或者不存在這類語句。
**注釋:**目前,有一些丟失的列和一些混亂的列。我們正在著手解決該問題,并隨著變化情況更新文檔。
### 23.1.1.?INFORMATION_SCHEMA SCHEMATA表
該方案是數據庫,因此SCHEMATA表提供了關于數據庫的信息。
<table border="1" cellpadding="0" id="table2"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><b>注釋</b></p></td> </tr><tr><td> <p> <span>CATALOG_NAME</span></p></td> <td> <p><span>-</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>SCHEMA_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>Database</span></p></td> </tr><tr><td> <p> <span>DEFAULT_CHARACTER_SET_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>DEFAULT_COLLATION_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SQL_PATH</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr></table>
**注釋:**SQL_PATH列的之總為NULL。
下述語句是等效的:
~~~
SELECT SCHEMA_NAME AS `Database
~~~
~~~
FROM INFORMATION_SCHEMA.SCHEMATA
~~~
~~~
[WHERE SCHEMA_NAME LIKE 'wild']
~~~
~~~
?
~~~
~~~
SHOW DATABASES
~~~
~~~
[LIKE 'wild']
~~~
### 23.1.2.?INFORMATION_SCHEMA TABLES表
TABLES表給出了關于數據庫中的表的信息。
<table border="1" cellpadding="0" id="table3"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p> <span>Table_</span><span>...</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p> <span>Table_</span><span>...</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ENGINE</span></p></td> <td> <p> <span>Engine</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>VERSION</span></p></td> <td> <p> <span>Version</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>ROW_FORMAT</span></p></td> <td> <p> <span>Row_format</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>TABLE_ROWS</span></p></td> <td> <p> <span>Rows</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>AVG_ROW_LENGTH</span></p></td> <td> <p> <span>Avg_row_length</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>DATA_LENGTH</span></p></td> <td> <p> <span>Data_length</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>MAX_DATA_LENGTH</span></p></td> <td> <p> <span>Max_data_length</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>INDEX_LENGTH</span></p></td> <td> <p> <span>Index_length</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>DATA_FREE</span></p></td> <td> <p> <span>Data_free</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>AUTO_INCREMENT</span></p></td> <td> <p> <span>Auto_increment</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>CREATE_TIME</span></p></td> <td> <p> <span>Create_time</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>UPDATE_TIME</span></p></td> <td> <p> <span>Update_time</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>CHECK_TIME</span></p></td> <td> <p> <span>Check_time</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>TABLE_COLLATION</span></p></td> <td> <p> <span>Collation</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>CHECKSUM</span></p></td> <td> <p> <span>Checksum</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>CREATE_OPTIONS</span></p></td> <td> <p> <span>Create_options</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>TABLE_COMMENT</span></p></td> <td> <p> <span>Comment</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr></table>
注釋:
·???????? TABLE_SCHEMA和TABLE_NAME是SHOW顯示中的單個字段,例如Table_in_db1。
·???????? TABLE_TYPE(表類型)應是BASE TABLE(基本表)或VIEW(視圖)。如果表是臨時性的,TABLE_TYPE = TEMPORARY。(沒有臨時視圖,因此,因此不存在歧義)。
·???????? 如果表位于INFORMATION_SCHEMA數據庫中,TABLE_ROWS列為NULL。對于InnoDB表,在SQL優化中,行計數僅是大概估計值。
·???????? 沒有關于表默認字符集的任何信息。TABLE_COLLATION處于關閉狀態,原因在于校對名稱以字符集名稱開頭。
下述語句是等效的:
~~~
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']
~~~
### 23.1.3.?INFORMATION_SCHEMA COLUMNS表
COLUMNS表給出了表中的列信息。
<table border="1" cellpadding="0" id="table4"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLUMN_NAME</span></p></td> <td> <p> <span>Field</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ORDINAL_POSITION</span></p></td> <td> <p><span>?</span></p></td> <td> <p>參見注釋</p></td> </tr><tr><td> <p> <span>COLUMN_DEFAULT</span></p></td> <td> <p> <span>Default</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_NULLABLE</span></p></td> <td> <p> <span>Null</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>DATA_TYPE</span></p></td> <td> <p> <span>Type</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CHARACTER_MAXIMUM_LENGTH</span></p></td> <td> <p> <span>Type</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CHARACTER_OCTET_LENGTH</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>NUMERIC_PRECISION</span></p></td> <td> <p> <span>Type</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>NUMERIC_SCALE</span></p></td> <td> <p> <span>Type</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CHARACTER_SET_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLLATION_NAME</span></p></td> <td> <p> <span>Collation</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLUMN_TYPE</span></p></td> <td> <p> <span>Type</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>COLUMN_KEY</span></p></td> <td> <p> <span>Key</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>EXTRA</span></p></td> <td> <p> <span>Extra</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr><tr><td> <p> <span>COLUMN_COMMENT</span></p></td> <td> <p> <span>Comment</span></p></td> <td> <p><span>MySQL擴展</span></p></td> </tr></table>
注釋:
·???????? 在SHOW中,類型顯示包括來自數個不同COLUMNS列的值。
·???????? ORDINAL_POSITION有必要,這是因為,你可能會在某一天需要ORDER BY ORDINAL_POSITION(按ORDINAL_POSITION排序)。不同于SHOW,SELECT沒有自動排序功能。
·???????? CHARACTER_OCTET_LENGTH應與CHARACTER_MAXIMUM_LENGTH相同,但多字節字符集除外。
·???????? 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]
~~~
### 23.1.4.?INFORMATION_SCHEMA STATISTICS表
STATISTICS表給出了關于表索引的信息。
<table border="1" cellpadding="0" id="table5"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p>=數據庫</p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p> <span>Table</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>NON_UNIQUE</span></p></td> <td> <p> <span>Non_unique</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>INDEX_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p>=數據庫</p></td> </tr><tr><td> <p> <span>INDEX_NAME</span></p></td> <td> <p> <span>Key_name</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SEQ_IN_INDEX</span></p></td> <td> <p> <span>Seq_in_index</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLUMN_NAME</span></p></td> <td> <p> <span>Column_name</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLLATION</span></p></td> <td> <p> <span>Collation</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CARDINALITY</span></p></td> <td> <p> <span>Cardinality</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SUB_PART</span></p></td> <td> <p> <span>Sub_part</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>PACKED</span></p></td> <td> <p> <span>Packed</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>NULLABLE</span></p></td> <td> <p> <span>Null</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>INDEX_TYPE</span></p></td> <td> <p> <span>Index_type</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>COMMENT</span></p></td> <td> <p> <span>Comment</span></p></td> <td> <p>MySQL擴展</p></td> </tr></table>
注釋:
·???????? 沒有關于這些索引的標準表。上面的列表與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]
~~~
### 23.1.5.?INFORMATION_SCHEMA USER_PRIVILEGES表
USER_PRIVILEGES(用戶權限)表給出了關于全程權限的信息。該信息源自mysql.user授權表。
<table border="1" cellpadding="0" id="table6"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>GRANTEE</span></p></td> <td> <p><span>?</span></p></td> <td> <p>例如“user'@'host”</p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>PRIVILEGE_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_GRANTABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 這是一個非標準表。其值來自mysql.user表。
### 23.1.6.?INFORMATION_SCHEMA SCHEMA_PRIVILEGES表
SCHEMA_PRIVILEGES(方案權限)表給出了關于方案(數據庫)權限的信息。該信息來自mysql.db授權表。
<table border="1" cellpadding="0" id="table7"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>GRANTEE</span></p></td> <td> <p><span>?</span></p></td> <td> <p>例如“user'@'host”</p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>PRIVILEGE_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_GRANTABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 這是一個非標準表。其值來自mysql.db表。
### 23.1.7.?INFORMATION_SCHEMA TABLE_PRIVILEGES表
TABLE_PRIVILEGES(表權限)表給出了關于表權限的信息。該信息源自mysql.tables_priv授權表。
<table border="1" cellpadding="0" id="table8"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>GRANTEE</span></p></td> <td> <p><span>?</span></p></td> <td> <p>例如“user'@'host”</p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>PRIVILEGE_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_GRANTABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
下述語句不等效:
~~~
SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
~~~
~~~
?
~~~
~~~
SHOW GRANTS ...
~~~
PRIVILEGE_TYPE可以包含這些值之一(僅能一個):SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE VIEW。
### 23.1.8.?INFORMATION_SCHEMA COLUMN_PRIVILEGES表
COLUMN_PRIVILEGES(列權限)表給出了關于列權限的信息。該信息源自mysql.columns_priv授權表。
<table border="1" cellpadding="0" id="table9"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>GRANTEE</span></p></td> <td> <p><span>?</span></p></td> <td> <p>例如“user'@'host”</p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLUMN_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>PRIVILEGE_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_GRANTABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 在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_PRIVILEGES
~~~
~~~
?
~~~
~~~
SHOW GRANTS ...
~~~
### 23.1.9.?INFORMATION_SCHEMA CHARACTER_SETS表
CHARACTER_SETS(字符集)表提供了關于可用字符集的信息。
<table border="1" cellpadding="0" id="table10"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>CHARACTER_SET_NAME</span></p></td> <td> <p> <span>Charset</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>DEFAULT_COLLATE_NAME</span></p></td> <td> <p> <span>Default collation</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>DESCRIPION</span></p></td> <td> <p> <span>Description</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>MAXLEN</span></p></td> <td> <p> <span>Maxlen</span></p></td> <td> <p>MySQL擴展</p></td> </tr></table>
注釋:
·???????? 我們增加了兩個非標準列,分別對應于SHOW CHARACTER SET輸出的Description(描述)和Maxlen(最大長度)列。
下述語句是等效的:
~~~
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
~~~
~~~
? [WHERE name LIKE 'wild']
~~~
~~~
?
~~~
~~~
SHOW CHARACTER SET
~~~
~~~
? [LIKE 'wild']
~~~
### 23.1.10.?INFORMATION_SCHEMA COLLATIONS表
COLLATIONS表提供了關于各字符集的對照信息。
<table border="1" cellpadding="0" id="table11"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>COLLATION_NAME</span></p></td> <td> <p> <span>Collation</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 我們增加了5個非標準列,分別對應于SHOW COLLATION輸出的Charset、Id、Default、Compiled和Sortlen列。
下述語句是等效的:
~~~
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
~~~
~~~
? [WHERE collation_name LIKE 'wild']
~~~
~~~
?
~~~
~~~
SHOW COLLATION
~~~
~~~
? [LIKE 'wild']
~~~
### 23.1.11.?INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表
COLLATION_CHARACTER_SET_APPLICABILITY表指明了可用于校對的字符集。這些列等效于SHOW COLLATION的前兩個顯示字段。
<table border="1" cellpadding="0" id="table12"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>COLLATION_NAME</span></p></td> <td> <p> <span>Collation</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CHARACTER_SET_NAME</span></p></td> <td> <p> <span>Charset</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
### 23.1.12.?INFORMATION_SCHEMA TABLE_CONSTRAINTS表
TABLE_CONSTRAINTS表描述了存在約束的表。
<table border="1" cellpadding="0" id="table13"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>CONSTRAINT_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>CONSTRAINT_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CONSTRAINT_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CONSTRAINT_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 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值不可用。
### 23.1.13.?INFORMATION_SCHEMA KEY_COLUMN_USAGE表
KEY_COLUMN_USAGE表描述了具有約束的鍵列。
<table border="1" cellpadding="0" id="table14"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>CONSTRAINT_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>CONSTRAINT_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CONSTRAINT_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>COLUMN_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ORDINAL_POSITION</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>POSITION_IN_UNIQUE_CONSTRAINT</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>REFERENCED_TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>REFERENCED_TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>REFERENCED_COLUMN_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 如果約束為外鍵,這就是外鍵列,而不是外鍵引用的列。
·???????? ORDINAL_POSITION的值是列在約束中的位置,而不是列在表中的位置。列位置采用從1開始的數值編號。
·???????? 對于“唯一”和“主鍵”約束,POSITION_IN_UNIQUE_CONSTRAINT的值為NULL。對于“外鍵”約束,它是所引用表內鍵中的順序位置。
例如,假定有兩個具有下述定義的表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表有兩行:
o??????? 一行含有CONSTRAINT_NAME='PRIMARY', TABLE_NAME='t1', COLUMN_NAME='s3', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=NULL。
o??????? 另一行含有CONSTRAINT_NAME='CO', TABLE_NAME='t3', COLUMN_NAME='s2', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=1。
### 23.1.14.?INFORMATION_SCHEMA ROUTINES表
ROUTINES表提供了關于存儲子程序(存儲程序和函數)的信息。此時,ROUTINES表不包含自定義函數(UDF)。
名為“mysql.proc name”的列指明了對應于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列,如果有的話。
<table border="1" cellpadding="0" id="table15"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b> mysql.proc</b></span><strong><span>名</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>SPECIFIC_NAME</span></p></td> <td> <p> <span>specific_name</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ROUTINE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>ROUTINE_SCHEMA</span></p></td> <td> <p> <span>db</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ROUTINE_NAME</span></p></td> <td> <p> <span>name</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ROUTINE_TYPE</span></p></td> <td> <p> <span>type</span></p></td> <td> <p> <span>{PROCEDURE|FUNCTION}</span></p></td> </tr><tr><td> <p> <span>DTD_IDENTIFIER</span></p></td> <td> <p><span>?</span></p></td> <td> <p>(數據類型描述符)</p></td> </tr><tr><td> <p> <span>ROUTINE_BODY</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>SQL</span></p></td> </tr><tr><td> <p> <span>ROUTINE_DEFINITION</span></p></td> <td> <p> <span>body</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>EXTERNAL_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>EXTERNAL_LANGUAGE</span></p></td> <td> <p> <span>language</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>PARAMETER_STYLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>SQL</span></p></td> </tr><tr><td> <p> <span>IS_DETERMINISTIC</span></p></td> <td> <p> <span>is_deterministic</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SQL_DATA_ACCESS</span></p></td> <td> <p> <span>sql_data_access</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SQL_PATH</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>SECURITY_TYPE</span></p></td> <td> <p> <span>security_type</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CREATED</span></p></td> <td> <p> <span>created</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>LAST_ALTERED</span></p></td> <td> <p> <span>modified</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SQL_MODE</span></p></td> <td> <p> <span>sql_mode</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>ROUTINE_COMMENT</span></p></td> <td> <p> <span>comment</span></p></td> <td> <p>MySQL擴展</p></td> </tr><tr><td> <p> <span>DEFINER</span></p></td> <td> <p> <span>definer</span></p></td> <td> <p>MySQL擴展</p></td> </tr></table>
注釋:
·???????? MySQL計算EXTERNAL_LANGUAGE,因此:
o??????? 如果mysql.proc.language='SQL',那么EXTERNAL_LANGUAGE為NULL。
o??????? 否則,EXTERNAL_LANGUAGE為mysql.proc.language中的值。然而,由于尚沒有外部語言,因此該值總為NULL。
### 23.1.15.?INFORMATION_SCHEMA VIEWS表
VIEWS表給出了關于數據庫中的視圖的信息。
<table border="1" cellpadding="0" id="table16"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>TABLE_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TABLE_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TABLE_NAME</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>VIEW_DEFINITION</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>CHECK_OPTION</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>IS_UPDATABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>DEFINER</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>SECURITY_TYPE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? 有一種新的權限SHOW VIEW,如果沒有它,將無法看到VIEWS表。
·???????? VIEW_DEFINITION列含有你在SHOW CREATE VIEW所生成的Create Table字段中見到的大多數信息。跳過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。
### 23.1.16.?INFORMATION_SCHEMA TRIGGERS表
TRIGGERS表提供了關于觸發程序的信息。
必須有SUPER權限才能查看該表。
<table border="1" cellpadding="0" id="table17"><tr><td> <p><strong><span> 標準名稱</span></strong></p></td> <td> <p><span><b>SHOW</b></span><strong><span>名稱</span></strong></p></td> <td> <p><strong><span> 注釋</span></strong></p></td> </tr><tr><td> <p> <span>TRIGGER_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>TRIGGER_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>TRIGGER_NAME</span></p></td> <td> <p> <span>Trigger</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>EVENT_MANIPULATION</span></p></td> <td> <p> <span>Event</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>EVENT_OBJECT_CATALOG</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>EVENT_OBJECT_SCHEMA</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>EVENT_OBJECT_TABLE</span></p></td> <td> <p> <span>Table</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ACTION_ORDER</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>0</span></p></td> </tr><tr><td> <p> <span>ACTION_CONDITION</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>ACTION_STATEMENT</span></p></td> <td> <p> <span>Statement</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ACTION_ORIENTATION</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>ROW</span></p></td> </tr><tr><td> <p> <span>ACTION_TIMING</span></p></td> <td> <p> <span>Timing</span></p></td> <td> <p><span>?</span></p></td> </tr><tr><td> <p> <span>ACTION_REFERENCE_OLD_TABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>ACTION_REFERENCE_NEW_TABLE</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span></p></td> </tr><tr><td> <p> <span>ACTION_REFERENCE_OLD_ROW</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>OLD</span></p></td> </tr><tr><td> <p> <span>ACTION_REFERENCE_NEW_ROW</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NEW</span></p></td> </tr><tr><td> <p> <span>CREATED</span></p></td> <td> <p><span>?</span></p></td> <td> <p> <span>NULL</span><span> (<span>0</span>)</span></p></td> </tr><tr><td> <p> <span>SQL_MODE</span></p></td> <td> <p><span>?</span></p></td> <td> <p><span>?</span></p></td> </tr></table>
注釋:
·???????? TRIGGER_SCHEMA和TRIGGER_NAME列中分別含有相應數據庫的名稱以及觸發程序的名稱,在該數據庫中,含有該觸發程序。
·???????? EVENT_MANIPULATION列含有下述值之一:INSERT、DELETE、或UPDATE。
·???????? 正如[第21章:](#)[*觸發程序*](# "Chapter?21.?Triggers")中指出的那樣,每個觸發程序均與一個表準確相關。EVENT_OBJECT_SCHEMA和EVENT_OBJECT_TABLE列包含相應的數據庫和表名,在該數據庫中,含有該表。
·???????? ACTION_ORDER語句含有觸發程序動作(在相同表上所有類似觸發程序列表中)的順序位置。目前該值總為0,這是因為在相同表上具有相同EVENT_MANIPULATION和ACTION_TIMING的觸發程序不能超過1個。
·???????? ACTION_STATEMENT列含有激活了觸發程序時將要執行的語句。這與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列顯示了創建觸發程序時有效的服務器SQL模式(無論當前的服務器SQL模式為何,只要激活了觸發程序,它將保持有效)。該列的可能取值范圍與sql_mode系統變量的取值范圍相同。請參見[5.3.2節,“SQL服務器模式”](# "5.3.2.?The Server SQL Mode")。
·???????? 在下述列中,目前總含有NULL:TRIGGER_CATALOG,EVENT_OBJECT_CATALOG,ACTION_CONDITION,ACTION_REFERENCE_OLD_TABLE,ACTION_REFERENCE_NEW_TABLE和CREATED。
例如,使用[21.3節,“使用觸發程序”](# "21.3.?Using Triggers")中定義的觸發程序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: NULL
~~~
~~~
1 row in set (1.54 sec)
~~~
另請參見[13.5.4.20節,“SHOW TRIGGERS語法”](# "13.5.4.20.?SHOW TRIGGERS Syntax")。
### 23.1.17.?其他INFORMATION_SCHEMA表
我們打算實施附加的INFORMATION_SCHEMA表。尤其是,我們確認了對INFORMATION_SCHEMA.PARAMETERS和INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS的需求。
### 23.2.?SHOW語句的擴展``
某些SHOW語句的擴展伴隨著INFORMATION_SCHEMA的實施:
·???????? SHOW可用于獲取關于INFORMATION_SCHEMA本身結構的信息。
·???????? 一些SHOW語句允許使用WHERE子句,這樣,在指定需要顯示的行時,可更為靈活。
INFORMATION_SCHEMA是一種信息數據庫,因此,在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 SET
~~~
~~~
SHOW COLLATION
~~~
~~~
SHOW COLUMNS
~~~
~~~
SHOW DATABASES
~~~
~~~
SHOW FUNCTION STATUS
~~~
~~~
SHOW KEYS
~~~
~~~
SHOW OPEN TABLES
~~~
~~~
SHOW PROCEDURE STATUS
~~~
~~~
SHOW STATUS
~~~
~~~
SHOW TABLE STATUS
~~~
~~~
SHOW TABLES
~~~
~~~
SHOW VARIABLES
~~~
如果有WHERE子句的話,將根據SHOW語句顯示的列名進行計算。例如,SHOW COLLATION語句可產生這些輸出列:
例如,SHOW CHARACTER SET語句可產生這些輸出列:
~~~
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
~~~
|
該語句顯示了多字節字符集。
~~~
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
~~~
|
~~~
?
~~~
這是MySQL參考手冊的翻譯版本,關于MySQL參考手冊,請訪問[dev.mysql.com](http://dev.mysql.com/doc/mysql/en)。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。
- 目錄
- 前言
- 1. 一般信息
- 2. 安裝MySQL
- 3. 教程
- NoName
- 4. MySQL程序概述
- 5. 數據庫管理
- 6. MySQL中的復制
- 7. 優化
- 8. 客戶端和實用工具程序
- 9. 語言結構
- 10. 字符集支持
- 11. 列類型
- 12. 函數和操作符
- 13. SQL語句語法
- 14. 插件式存儲引擎體系結構
- 15. 存儲引擎和表類型
- 16. 編寫自定義存儲引擎
- 17. MySQL簇
- 18. 分區
- 19. MySQL中的空間擴展
- 20. 存儲程序和函數
- 21. 觸發程序
- 22. 視圖
- 23. INFORMATION_SCHEMA信息數據庫
- 24. 精度數學
- 25. API和庫
- 26. 連接器
- 27. 擴展MySQL
- A. 問題和常見錯誤
- B. 錯誤代碼和消息
- C. 感謝
- D. MySQL變更史
- E. 移植到其他系統
- F. 環境變量
- G. MySQL正則表達式
- H. MySQL中的限制
- I. 特性限制
- J. GNU通用公共許可
- K. MySQL FLOSS許可例外
- 索引