ITPub博客

首页 > 数据库 > > 24.2 INFORMATION_SCHEMA 中具体的表

24.2 INFORMATION_SCHEMA 中具体的表

作者:飘絮絮絮丶 时间:2020-05-11 11:07:57 0 删除 编辑

参考官方文档:
dev.mysql.com/doc/refma

  • CHARACTER_SETS表提供有关可用字符集的信息。



CHARACTER_SETS表包含以下列:

    • CHARACTER_SET_NAME



字符集名称。

    • DEFAULT_COLLATE_NAME



字符集的默认排序规则。

    • DESCRIPTION



字符集的描述。

    • MAXLEN



存储一个字符所需的最大字节数。


注意,以下语句是等效的:


SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS [WHERE CHARACTER_SET_NAME LIKE 'wild']
SHOW CHARACTER SET [LIKE 'wild']


  • COLLATIONS表提供有关每个字符集的排序规则的信息。



COLLATIONS 表有以下字段:

    • COLLATION_NAME



规则名称。

    • CHARACTER_SET_NAME



与排序规则关联的字符集的名称。

    • ID



规则ID。

    • IS_DEFAULT



排序规则是否为其字符集的默认值。

    • IS_COMPILED



字符集是否编译到服务器中。

    • SORTLEN



这与字符集中表示的字符串进行排序所需的内存量关联。



注意,以下语句等效:


SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS [WHERE COLLATION_NAME LIKE 'wild']
SHOW COLLATION [LIKE 'wild']


  • COLUMNS表提供有关表中列的信息。



    • TABLE_CATALOG



包含该列的表所属的目录的名称。该值始终为def。

    • TABLE_SCHEMA



包含列的表所属的方案(数据库)的名称。

    • TABLE_NAME



包含该列的表的名称。

    • COLUMN_NAME



列的名称。

    • ORDINAL_POSITION



表中列的位置。 ORDINAL_POSITION是必要的,因为你可能想使用ORDER BY ORDINAL_POSITION。与SHOW COLUMNS不同,COLUMNS表中的SELECT没有自动排序。

    • COLUMN_DEFAULT



列的默认值。如果列具有显式缺省值NULL,或者列定义不包含DEFAULT子句,则此值为NULL。


    • IS_NULLABLE



列可空性。如果NULL值可以存储在列中,则值为YES,否则为NO。

    • DATA_TYPE



列数据类型。


DATA_TYPE值只是类型名称,没有其他信息。 COLUMN_TYPE值包含类型名称以及可能的其他信息,例如精度或长度。

    • CHARACTER_MAXIMUM_LENGTH



对于字符串列,最大长度(以字符为单位)。

    • CHARACTER_OCTET_LENGTH



对于字符串列,最大长度(以字节为单位)。


    • NUMERIC_PRECISION



对于数字列,数字精度。

    • NUMERIC_SCALE



对于数字列,数字刻度。

    • DATETIME_PRECISION



对于时间列,小数秒的精度。


    • CHARACTER_SET_NAME



对于字符串列,字符集名称。


    • COLLATION_NAME



对于字符串列,排序规则名称。

    • COLUMN_TYPE



列数据类型。


DATA_TYPE值只是类型名称,没有其他信息。 COLUMN_TYPE值包含类型名称以及可能的其他信息,例如精度或长度


    • COLUMN_KEY

字段是否被索引:


如果COLUMN_KEY为空,则该列不会被索引,也不会作为多列非唯一索引中的辅助列索引。


如果COLUMN_KEY是PRI,则该列是PRIMARY KEY或者是多列PRIMARY KEY中的列之一。


如果COLUMN_KEY是UNI,则该列是UNIQUE索引的第一列。 (UNIQUE索引允许多个NULL值,但您可以通过检查Null列来判断该列是否允许NULL。)


如果COLUMN_KEY是MUL,则该列是非唯一索引的第一列,其中在列中允许多次出现给定值。



如果多个COLUMN_KEY值应用于表的给定列,则COLUMN_KEY按PRI,UNI,MUL的顺序显示具有最高优先级的值。


如果UNIQUE索引不能包含NULL值并且表中没有PRIMARY KEY,则它可能显示为PRI。 如果多个列形成复合UNIQUE索引,则UNIQUE索引可以显示为MUL; 虽然列的组合是唯一的,但每列仍然可以保存给定值的多次。


    • EXTRA



有关给定列的任何其他可用信息。 在这些情况下,该值是非空的:


auto_increment用于具有AUTO_INCREMENT属性的列。

对于 TIMESTAMP或 DATETIME字段有 ON UPDATE CURRENT_TIMESTAMP 属性就是 on update CURRENT_TIMESTAMP


对于生成列的 VIRTUAL GENERATED或 VIRTUAL STORED。

    • PRIVILEGES

字段所拥有的权限

    • COLUMN_COMMENT

字段所包含的任何注释

    • GENERATION_EXPRESSION

对于生成的列,显示用于计算列值的表达式。 为非生成列则为空。



注意:

  • 在SHOW COLUMNS中,Type显示包含来自多个不同COLUMNS列的值。
  • CHARACTER_OCTET_LENGTH应与CHARACTER_MAXIMUM_LENGTH相同,但多字节字符集除外。
  • CHARACTER_SET_NAME可以来自COLLATION_NAME。 例如,如果你使用 SHOW FULL COLUMNS FROM t,并且你在COLLATION_NAME列中看到值为latin1_swedish_ci,那么字符集就在第一个下划线之前的值: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']

  • COLUMN_PRIVILEGES表提供有关列权限的信息。 它从mysql.columns_priv系统表中获取其值。



COLUMN_PRIVILEGES表包含这些列:

    • GRANTEE

授予权限的帐户的名称,格式为“user_name”@“host_name”。

    • TABLE_CATALOG

包含该列的表所属的目录的名称。 该值始终为def。

    • TABLE_SCHEMA

包含列的表所属的方案(数据库)的名称。

    • TABLE_NAME

包含字段的表的名称

    • PRIVILEGE_TYPE



被授予的权限。 该值可以是可以在列级别授予的任何权限; 请参见第13.7.1.4节“GRANT语法”。 每行列出一个权限,因此每一行表示被授予的每一个字段权限。


在SHOW FULL COLUMNS的输出中,权限全在一列以小写显示,例如,select,insert,update,references。 在COLUMN_PRIVILEGES中,每行是一个权限,以大写表示。


    • IS_GRANTABLE



如果用户具有GRANT OPTION权限,则为YES,否则为NO。 输出不会将GRANT OPTION列为具有PRIVILEGE_TYPE ='GRANT OPTION'的单独行。


注意: COLUMN_PRIVILEGES 是非标准的 INFORMATION_SCHEMA 表


以下语句不等价:
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
SHOW GRANTS ...

  • KEY_COLUMN_USAGE表描述哪些键列具有约束。



KEY_COLUMN_USAGE表包含以下列:

    • COLUMN_NAME



具有约束的列的名称。


如果约束是外键,则这是外键的列,而不是外键引用的列。

    • ORDINAL_POSITION

约束所在的字段位置,而不是列在表中的位置。 列位置从1开始编号。

    • POSITION_IN_UNIQUE_CONSTRAINT



唯一和主键约束为NULL。 对于外键约束,此列是正在引用的表的键中的序号位置。 对应于ORDINAL_POSITION

    • REFERENCED_TABLE_SCHEMA



被约束引用的方案(数据库)的名称。

    • REFERENCED_TABLE_NAME

被约束引用的表名

    • REFERENCED_COLUMN_NAME



约束引用的列的名称。

  • PARTITIONS表提供有关表分区的信息。 此表中的每一行对应于分区表的单个分区或子分区。


    • TABLE_NAME

包含分区的表名

    • SUBPARTITION_NAME



如果PARTITIONS的表行表示子分区,则为子分区的名称; 否则为NULL。

    • PARTITION_ORDINAL_POSITION



所有分区被索引顺序与定义的顺序相同,1是分配给第一个分区的数字。 随着分区的添加,删除和重组,索引可能会发生变化; 显示的数字是此列反映的当前顺序,考虑到任何索引变更。

    • SUBPARTITION_ORDINAL_POSITION



给定分区中的子分区也被索引和重新索引,其方式与在表中索引分区的方式相同。


    • PARTITION_METHOD

值RANGE,LIST,HASH,LINEAR HASH,KEY或LINEAR KEY之一;

    • SUBPARTITION_METHOD

HASH,LINEAR HASH,KEY或LINEAR KEY之一的值;


    • PARTITION_EXPRESSION

用于创建表的当前分区方案的CREATE TABLE或ALTER TABLE语句中的分区函数的表达式。


    • PARTITION_DESCRIPTION



此列用于RANGE和LIST分区。 对于RANGE分区,它包含分区的VALUES LESS THAN子句中设置的值,该子句可以是整数或MAXVALUE。 对于LIST分区,此列包含分区的VALUES IN子句中定义的值,该子句是逗号分隔的整数值列表。


对于PARTITION_METHOD不是RANGE或LIST的分区,此列始终为NULL。


    • TABLE_ROWS



分区中的表行数。


对于分区的InnoDB表,TABLE_ROWS列中给出的行计数仅是SQL优化中使用的估计值,并且可能并不总是精确的。


对于NDB表,您还可以使用ndb_desc工具获取此信息。


    • DATA_FREE

分配给分区或子分区没有被使用的字节数


    • CREATE_TIME

分区或子分区被创建的时间

    • UPDATE_TIME

分区或子分区最后被修改的时间


    • CHECK_TIME

分区或子分区最后被检查的时间

    • CHECKSUM

checksum 值,如果有的话,否则是NULL


    • PARTITION_COMMENT

注释的文本,如果分区有一个。 如果不是,则该值为空。


分区注释的最大长度定义为1024个字符,PARTITION_COMMENT列的显示宽度也是1024,是与此限制匹配的字符。




    • TABLESPACE_NAME

分区所属的表空间名称。这个值总是 DEFAULT,除非使用NDB存储引擎。


  • REFERENTIAL_CONSTRAINTS表提供有关外键的信息。



    • CONSTRAINT_SCHEMA

约束术语的方案(数据库)的名称


    • CONSTRAINT_NAME

约束的名称

    • UNIQUE_CONSTRAINT_NAME

约束引用的唯一约束的名称。

    • UPDATE_RULE

约束ON UPDATE属性的值。 可能的值为CASCADE,SET NULL,SET DEFAULT,RESTRICT,NO ACTION。

    • DELETE_RULE

约束ON DELETE属性的值。 可能的值为CASCADE,SET NULL,SET DEFAULT,RESTRICT,NO ACTION。

    • REFERENCED_TABLE_NAME

约束引用的表的名称。


  • SCHEMA_PRIVILEGES表提供有关方案(数据库)特权的信息。 它从mysql.db系统表中获取其值。



SCHEMA_PRIVILEGES 有以下字段


    • GRANTEE

被授予权限的用户的名称,格式为'user_name'@'host_name'。


    • TABLE_SCHEMA

方案的名称

    • PRIVILEGE_TYPE

被授予的权限。 该值可以是可以在方案级别授予的任何权限。 每行列出一个权限,因此每一行被一个被授予的方案权限。

    • IS_GRANTABLE

如果用户具有GRANT OPTION权限,则为YES,否则为NO。 输出不会将GRANT OPTION列为具有PRIVILEGE_TYPE ='GRANT OPTION'的单独行。



注意,以下语句不等价:


SELECT ... FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
SHOW GRANTS ...


  • STATISTICS 表 提供关于表索引的信息



STATISTICS 表有下列字段:

    • TABLE_SCHEMA

包含索引的表的方案名

    • NON_UNIQUE

如果是0,索引不能包含重复值,1可以包含。

    • INDEX_SCHMEA

索引所属的方案名

    • INDEX_NAME

索引的名称。如果索引是主键,则名称总是PRIMARY

    • SEQ_IN_INDEX

索引中的列序列号,以1开头。


    • COLUMN_NAME

字段名称,可以参见 EXPRESSION 更多描述


    • COLLATION

列如何在索引中排序。 这可以具有值A(升序),D(降序)或NULL(未排序)。


    • CARDINALITY



评估索引中的唯一值的数量。 要更新此数字,请运行ANALYZE TABLE或(对于MyISAM表)myisamchk -a。


CARDINALITY基于存储为整数的统计数据计算,因此即使对于小型表,该值也不一定精确。 基数越高,MySQL在进行连接时使用索引的可能性就越大。


    • SUB_PART

索引前缀。 也就是说,如果列仅被部分索引,则是索引的字符的数,如果整列被索引,则为NULL。

    • NULLABLE

YES表上字段可能包含 NULL值,''相反。


    • INDEX_TYPE

使用的索引方法(BTREE,FULLTEXT,HASH,RTREE)。


    • COMMENT

有关未在其自己的列中描述的索引的信息,例如在禁用索引时是 disabled。


    • INDEX_COMMENT

在创建索引时为索引提供的任何带有COMMENT属性的注释。




注意:以下语句等价
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name = 'tbl_name' AND table_schema = 'db_name'
SHOW INDEX FROM tbl_name FROM db_name


  • TABLES表提供有关数据库中表的信息。

tables 表有下列字段:

    • TABLE_TYPE

对于表是 BASE TABLE,对于视图是VIEW,对于INFORMATION_SCHEMA 表是 SYSTEM VIEW。TABLES表不会列出临时表。


    • VERSION

表.frm文件的版本号

    • ROW_FORMAT



行存储格式( Fixed, Dynamic, Compressed, Redundant, Compact)。使用Antelope文件格式时,InnoDB表格式为Redundant或Compact;使用Barracuda文件格式时,InnoDB表格格式为Compressed或Dynamic。




    • TABLE_ROWS



行数。 某些存储引擎(如MyISAM)会存储确切的数目。 对于其他存储引擎,例如InnoDB,该值是近似值,并且可以与实际值相差多达40%至50%。 在这种情况下,使用SELECT COUNT(*)来获得准确的计数。


INFORMATION_SCHEMA表的TABLE_ROWS为NULL。


对于InnoDB表,行计数只是SQL优化中使用的粗略估计。 (如果对InnoDB表进行了分区,也是如此。)


  • AVG_ROW_LENGTH

平均行长度

  • DATA_FREE

已分配但未使用的字节数。


InnoDB表报告表所属的表空间的可用空间。 对于位于共享表空间中的表,这是共享表空间的可用空间。 如果您使用多个表空间并且该表具有自己的表空间,则可用空间仅用于该表。 可用空间表示完全空闲的区域中的字节数减去安全边界。 即使可用空间显示为0,只要不需要分配新的扩展区,就可以插入行。


对于NDB群集,DATA_FREE显示磁盘上为磁盘数据表或片段分配但未使用的空间。 (DATA_LENGTH列报告内存中数据资源使用情况。)


对于分区表,此值仅为估计值,可能不完全正确。 在这种情况下获取此信息的更准确方法是查询INFORMATION_SCHEMA PARTITIONS表,如下例所示:


SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable';


    • AUTO_INCREMENT



下一个 AUTO_INCREMENT 值


    • CREATE_TIME

表被创建的时刻

    • UPDATE_TIME



上次更新数据文件的时间。 对于某些存储引擎,此值为NULL。 例如,InnoDB在其系统表空间中存储多个表,并且数据文件时间戳不适用。 即使每个InnoDB表在单独的.ibd文件中使用每个表文件模式,更改缓冲也会延迟写入数据文件,因此文件修改时间与上次插入,更新或删除的时间不同。 对于MyISAM,使用数据文件时间戳; 但是,在Windows上,更新不会更新时间戳,因此值不准确。


    • CHECK_TIME

上次检查表的时间。 此时并非所有存储引擎都更新,在这种情况下,值始终为NULL。


对于分区的InnoDB表,CHECK_TIME始终为NULL。


注意:下列语句是等价的


SELECT TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM, CREATE_OPTIONS, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'db_name' [AND table_name LIKE 'wild']
SHOW TABLE STATUS FROM db_name [LIKE 'wild']






SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'db_name' [AND table_name LIKE 'wild']


SHOW FULL TABLES FROM db_name [LIKE 'wild']




  • TRIGGERS表提供有关触发器的信息。 要查看有关表的触发器的信息,您必须具有该表的TRIGGER权限。



TRIGGERS 表有下列字段:


    • EVENT_MANIPULATION



触发事件。 这是触发器激活的关联表上的操作类型。 值为INSERT(已插入行),DELETE(已删除行)或UPDATE(已修改行)。


    • ACTION_ORDER

触发器操作在具有相同EVENT_MANIPULATION和ACTION_TIMING值的同一表上的触发器列表中的序号位置。


    • ACCTION_CONDITION

这个值总是null




    • ACCTION_TIMING

触发器在触发事件之前还是之后激活。 值为BEFORE或AFTER。


    • CREATED



创建触发器的日期和时间。 在MySQL 5.7.2或更高版本中创建的触发器的是TIMESTAMP(2)值(以百分之几秒为单位),对于在5.7.2之前创建的触发器为NULL。


    • DEFINER

以'user_name'@'host_name'格式创建触发器的用户的帐户。




例如:


SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA='test' AND TRIGGER_NAME='ins_sum'\G




  • VIEWS表提供有关数据库中视图的信息。 您必须具有SHOW VIEW权限才能访问此表。


    • VIEW_DEFINITION



提供视图定义的SELECT语句。 此列包含您在SHOW CREATE VIEW生成的“Create Table”列中看到的大部分内容。 会略过SELECT之前的单词并跳过单词WITH 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

CHECK_OPTION属性的值。 该值是NONE,CASCADE或LOCAL之一。

    • IS_UPDATABLE

MySQL在CREATE VIEW时设置一个标记,称为视图可更新性标志。 如果UPDATE和DELETE(以及类似操作)对于视图是合法的,则该标志设置为YES(true)。 否则,该标志设置为NO(false)。 VIEWS表中的IS_UPDATABLE列显示此标志的状态



如果视图是不可更新的,那么,UPDATE,DELETE,和INSERT是非法的并被拒绝。


如果视图依赖于一个或多个其他视图,并且更新其中一个基础视图,则IS_UPDATABLE标志可能不可靠。 无论IS_UPDATABLE值如何,服务器都会跟踪视图的可更新性,并正确拒绝对不可更新的视图的数据更改操作。 如果视图的IS_UPDATABLE值由于对基础视图的更改而变得不准确,则可以通过删除并重新创建视图来更新该值。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3134632/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42206