助力软件开发企业降本增效 PHP / java源码系统,只需一次付费,代码终身使用! 广告
### 第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)。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。