第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_name(表名) table_type(表类型) 引擎
v56  VIEW(视图) NULL
v3VIEW(视图) NULL
v2VIEW(视图) NULL
vVIEW(视图) 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权限要求不存在差别。在任何一种情况下,要想查看关于它的信息,需要对某类对象拥有特定权限。
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)。请参见本文末尾处给出的保留字列表。www.dbazine/gulutzan5.shtml。
字符列(例如TABLES.TABLE_NAME)定义通常是VARCHAR(N) CHARACTER SET utf8,其中,N至少为64。
在每一部分中,指明了等效于从INFORMATION_SCHEMA中检索信息的SELECT语句的SHOW语句,或者不存在这类语句。
注释:目前,有一些丢失的列和一些混乱的列。我们正在着手解决该问题,并随着变化情况更新文档。
23.1.1. INFORMATION_SCHEMA SCHEMATA表
该方案是数据库,因此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 `DatabaseFROM INFORMATION_SCHEMA.SCHEMATA[WHERE SCHEMA_NAME LIKE 'wild'] SHOW DATABASES[LIKE 'wild']23.1.2. INFORMATION_SCHEMA TABLES表
TABLES表给出了关于数据库中的表的信息。
标准名称SHOW名称注释
TABLE_CATALOG NULL
TABLE_SCHEMATable_...
TABLE_NAMETable_...
TABLE_TYPE 
ENGINEEngineMySQL扩展
VERSIONVersionMySQL扩展
ROW_FORMATRow_formatMySQL扩展
TABLE_ROWSRowsMySQL扩展
AVG_ROW_LENGTHAvg_row_lengthMySQL扩展
DATA_LENGTHData_lengthMySQL扩展
MAX_DATA_LENGTHMax_data_lengthMySQL扩展
INDEX_LENGTHIndex_lengthMySQL扩展
DATA_FREEData_freeMySQL扩展
AUTO_INCREMENTAuto_incrementMySQL扩展
CREATE_TIMECreate_timeMySQL扩展
UPDATE_TIMEUpdate_timeMySQL扩展
CHECK_TIMECheck_timeMySQL扩展
TABLE_COLLATIONCollationMySQL扩展
CHECKSUMChecksumMySQL扩展
CREATE_OPTIONSCreate_optionsMySQL扩展
TABLE_COMMENTCommentMySQL扩展
注释:
·        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表
COLUM
NS表给出了表中的列信息。
标准名称SHOW名称注释
TABLE_CATALOG NULL
TABLE_SCHEMA 
TABLE_NAME 
COLUMN_NAMEField
ORDINAL_POSITION 参见注释
COLUMN_DEFAULTDefault
IS_NULLABLENull
mysql帮助文档
DATA_TYPEType
CHARACTER_MAXIMUM_LENGTHType
CHARACTER_OCTET_LENGTH 
NUMERIC_PRECISIONType
NUMERIC_SCALEType
CHARACTER_SET_NAME 
COLLATION_NAMECollation
COLUMN_TYPETypeMySQL扩展
COLUMN_KEYKeyMySQL扩展
EXTRAExtraMySQL扩展
COLUMN_COMMENTCommentMySQL扩展
注释:
·        在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表给出了关于表索引的信息。
标准名称SHOW名称注释
TABLE_CATALOG NULL
TABLE_SCHEMA =数据库
TABLE_NAMETable
NON_UNIQUENon_unique
INDEX_SCHEMA =数据库
INDEX_NAMEKey_name
SEQ_IN_INDEXSeq_in_index
COLUMN_NAMEColumn_name
COLLATIONCollation
CARDINALITYCardinality
SUB_PARTSub_partMySQL扩展
PACKEDPackedMySQL扩展
NULLABLENullMySQL扩展
INDEX_TYPEIndex_typeMySQL扩展
COMMENTCommentMySQL扩展
注释:
·       
没有关于这些索引的标准表。上面的列表与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授权表。
标准名称SHOW名称注释
GRANTEE 例如“user'@'host”
TABLE_CATALOG NULL
PRIVILEGE_TYPE 
IS_GRANTABLE 
注释:
·        这是一个非标准表。其值来自mysql.user表
23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表
SCHEMA_PRIVILEGES(方案权限)表给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。
标准名称SHOW名称注释
GRANTEE 例如“user'@'host”
TABLE_CATALOG NULL
TABLE_SCHEMA 
PRIVILEGE_TYPE 
IS_GRANTABLE 
注释:
·        这是一个非标准表。其值来自mysql.db表。
23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表
TABLE_PRIVILEGES(表权限)表给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。
标准名称SHOW名称注释
GRANTEE 例如“user'@'host”
TABLE_CATALOG NULL
TABLE_SCHEMA 
TABLE_NAME 
PRIVILEGE_TYPE 
IS_GRANTABLE 
下述语句不等效:
SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES SHOW GRANTS ...PRIVILEGE_TYPE可以包含这些值之一(仅能一个):SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE
VIEW。
23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表
COLUMN_PRIVILEGES(列权限)表给出了关于列权限的信息。该信息源自lumns_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 ...23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表
CHARACTER_SETS(字符集)表提供了关于可用字符集的信息。
标准名称SHOW名称注释
CHARACTER_SET_NAMECharset
DEFAULT_COLLATE_NAMEDefault collation
DESCRIPIONDescriptionMySQL扩展
MAXLENMaxlenMySQL扩展
注释:
·        我们增加了两个非标准列,分别对应于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表提供了关于各字符集的对照信息。
标准名称SHOW名称注释
COLLATION_NAMECollation
注释:
·        我们增加了5个非标准列,分别对应于SHOW
COLLATION输出的Charset、Id、Default、Compiled和Sortlen列。
下述语句是等效的:
SELECT COLLATION

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。