24.5 INFORMATION_SCHEMA COLUMNStable
COLUMNStable 提供有关 table 中列的信息。
COLUMNStable 具有以下列:
TABLE_CATALOG
包含该列的 table 所属的目录的名称。此值始终为def
。
TABLE_SCHEMA
包含该列的 table 所属的架构(数据库)的名称。
TABLE_NAME
包含列的 table 的名称。
COLUMN_NAME
列的名称。
ORDINAL_POSITION
table 格在 table 格中的位置。 ORDINAL_POSITION
是必需的,因为您可能想说ORDER BY ORDINAL_POSITION
。不同于COLUMNStable 中的SHOW 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
值应用于 table 的给定列,则COLUMN_KEY
以PRI
,UNI
,MUL
的 Sequences 显示优先级最高的那个。
如果UNIQUE
索引不能包含NULL
值并且 table 中没有PRIMARY KEY
,则它可能显示为PRI
。如果几列构成复合UNIQUE
索引,则UNIQUE
索引可能显示为MUL
;尽管各列的组合是唯一的,但各列仍可以容纳多次出现的给定值。
EXTRA
有关给定列的任何其他可用信息。在以下情况下,该值是非空的:
-
auto_increment
用于具有AUTO_INCREMENT
属性的列。 -
PRIVILEGES
您具有该列的特权。
COLUMN_COMMENT
列定义中包含的任何 Comments。
GENERATION_EXPRESSION
对于生成的列,显示用于计算列值的 table 达式。对于未生成的列为空。有关生成的列的信息,请参见第 13.1.18.7 节“创建 table 和生成的列”。
Notes
-
在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
之前的字符集。
SHOW COLUMNS语句也提供列信息。参见第 13.7.5.5 节“ SHOW COLUMNS 语句”。以下语句几乎等效:
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']