目录
INFORMATION_SCHEMA提供了访问数据库元数据的方式。
元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
例如:
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
|
集合中含 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 语句的扩展”。
标准
在 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 权限要求不存在差别。在任何一种情况下,要想查看关于它的信息,需要对某类对象拥有特定权限。
下述章节说明
在下面的章节中,我们选择了INFORMATION_SCHEMA中的表和列。对于每一列,有三类信息:
· “标准名称”:指明了列的标准 SQL 名称。
· “SHOW 名称”:指明了最近 SHOW 语句中的等效字段名,如果有的话。
· “注释”给出了适用的附加信息。
为了避免使用标准或 DB2、SQL 服务器或 Oracle 中保留的名称,我们更改了标注为“SQL 扩展”的列名。(例如,在 TABLES 表中,我们将COLLATION 改为 TABLE_COLLATION)。请参见本文末尾处给出的保留字列表。http://www.dbazine.com/gulutzan5.shtml。
字符列 (例如TABLES.TABLE_NAME) 定义通常是VARCHAR(N) CHARACTER SET utf8,其中,N 至少为 64。
在每一部分中,指明了等效于从INFORMATION_SCHEMA 中检索信息的 SELECT 语句的 SHOW 语句,或者不存在这类语句。
注释:目前,有一些丢失的列和一些混乱的列。我们正在着手解决该问题,并随着变化情况更新文档。
该方案是数据库,因此SCHEMATA 表提供了关于数据库的信息。
|
标准名称 |
SHOW名称 |
注释 |
|
CATALOG_NAME |
- |
NULL |
|
SCHEMA_NAME |
|
Database |
|
DEFAULT_CHARACTER_SET_NAME |
|
|
|
DEFAULT_COLLATION_NAME |
|
|
|
SQL_PATH |
|
NULL |
注释:SQL_PATH 列的之总为 NULL。
下述语句是等效的:
SELECT SCHEMA_NAME AS `Database
FROM INFORMATION_SCHEMA.SCHEMATA
[WHERE SCHEMA_NAME LIKE 'wild']
SHOW DATABASES
[LIKE 'wild']
TABLES 表给出了关于数据库中的表的信息。
|
标准名称 |
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 数据库中,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']
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 中,类型显示包括来自数个不同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]
STATISTICS表给出了关于表索引的信息。
|
标准名称 |
SHOW名称 |
注释 |
|
TABLE_CATALOG |
|
NULL |
|
TABLE_SCHEMA |
|
=数据库 |
|
TABLE_NAME |
Table |
|
|
NON_UNIQUE |
Non_unique |
|
|
INDEX_SCHEMA |
|
=数据库 |
|
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]
USER_PRIVILEGES(用户权限) 表给出了关于全程权限的信息。该信息源自mysql.user授权表。
|
标准名称 |
SHOW名称 |
注释 |
|
GRANTEE |
|
例如“user'@'host” |
|
TABLE_CATALOG |
|
NULL |
|
PRIVILEGE_TYPE |
|
|
|
IS_GRANTABLE |
|
|
注释:
· 这是一个非标准表。其值来自mysql.user表。
SCHEMA_PRIVILEGES(方案权限) 表给出了关于方案 (数据库) 权限的信息。该信息来自mysql.db授权表。
|
标准名称 |
SHOW名称 |
注释 |
|
GRANTEE |
|
例如“user'@'host” |
|
TABLE_CATALOG |
|
NULL |
|
TABLE_SCHEMA |
|
|
|
PRIVILEGE_TYPE |
|
|
|
IS_GRANTABLE |
|
|
注释:
· 这是一个非标准表。其值来自mysql.db表。
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_PRIVILEGES
SHOW GRANTS ...
PRIVILEGE_TYPE可以包含这些值之一 (仅能一个):SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE VIEW。
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_PRIVILEGES
SHOW GRANTS ...
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']
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']
COLLATION_CHARACTER_SET_APPLICABILITY表指明了可用于校对的字符集。这些列等效于SHOW COLLATION 的前两个显示字段。
|
标准名称 |
SHOW名称 |
注释 |
|
COLLATION_NAME |
Collation |
|
|
CHARACTER_SET_NAME |
Charset |
|
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 值不可用。
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 开始的数值编号。
· 对于“唯一”和“主键”约束,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。
ROUTINES 表提供了关于存储子程序 (存储程序和函数) 的信息。此时,ROUTINES 表不包含自定义函数 (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 |
|
(数据类型描述符) |
|
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,因此:
o 如果mysql.proc.language='SQL',那么EXTERNAL_LANGUAGE为NULL。
o 否则,EXTERNAL_LANGUAGE为mysql.proc.language 中的值。然而,由于尚没有外部语言,因此该值总为NULL。
VIEWS表给出了关于数据库中的视图的信息。
|
标准名称 |
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 字段中见到的大多数信息。跳过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。
TRIGGERS 表提供了关于触发程序的信息。
必须有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 列中分别含有相应数据库的名称以及触发程序的名称,在该数据库中,含有该触发程序。
· EVENT_MANIPULATION列含有下述值之一:INSERT、DELETE、或 UPDATE。
· 正如第 21 章:触发程序中指出的那样,每个触发程序均与一个表准确相关。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 服务器模式”。
· 在下述列中,目前总含有 NULL:TRIGGER_CATALOG,EVENT_OBJECT_CATALOG,ACTION_CONDITION,ACTION_REFERENCE_OLD_TABLE,ACTION_REFERENCE_NEW_TABLE和CREATED。
例如,使用21.3 节,“使用触发程序”中定义的触发程序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)
某些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。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。