目录
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。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的ã€�