这个专题主要讲information_schema数据库下的一些表

如无特殊说明数据库版本为MySQL 5.7.26

1. COLUMNS

该表显示表中列的信息

有如下栏位

  • TABLE_CATALOG 包含列的表所属的目录的名称,该值总是def
  • TABLE_SCHEMA 包含列的表所属的数据库的名称。
  • TABLE_NAME 包含列的表名
  • COLUMN_NAME 列名
  • ORDINAL_POSITION 该列在表中的位置
  • COLUMN_DEFAULT 列的默认值,如果未定义或者显式的指定为NULL,则该值为NULL
  • IS_NULLABLE 该列是否为空(YES/NO)
  • DATA_TYPE 列的数据类型,不包含其他信息,如数据类型的精度
  • CHARACTER_MAXIMUM_LENGTH 字符串类型的列的最大长度,字符为单位
  • CHARACTER_OCTET_LENGTH 字符串类型的列的最大长度,字符为字节
  • NUMERIC_PRECISION number类型的列的精度
  • NUMERIC_SCALE number类型的列的scale
  • DATETIME_PRECISION 对于日期类型的列的分数秒精度
  • CHARACTER_SET_NAME 对于字符串的列,其字符集的名称
  • COLLATION_NAME 对于字符串的列,其排序规则的名称
  • COLUMN_TYPE列的数据类型,除了类型外可能包含其他信息,例如精度等
  • COLUMN_KEY 该列是否被索引
  • EXTRA 列的其他一些信息
  • PRIVILEGES 你对该列所拥有的权限
  • COLUMN_COMMENT 列的注释
  • GENERATION_EXPRESSION 如果是生成列,这里显示用来继续其值的表达式,否则为空

接下来对上面的一些栏位做进一步的介绍

1.1 COLUMN_KEY

该列显示列是否被索引,其有如下可能值

  • 空 代表没有被索引,或者是一个多列的非唯一的索引的次要列
  • PRI 代表是主键,或者是一个多列主键的其中一个栏位
  • UNI 代表是一个唯一索引的第一个列,一个唯一索引是可以有多个空值的
  • MUL 代表该列是一个非唯一索引的第一个列

如果一个栏位在多个索引中,COLUMN_KEY只会显示其中优先级最高的一个,顺序为 PRI, UNI, MUL

如果表中无主键,如果一个唯一索引不可以包含空值(定义非空),该列其可能会被显示为PRI

一个复合索引如果是唯一的,该列也有可能会被显示为MUL

1.2 EXTRA

该列用于显示额外的信息

  • auto_increment 代表该列有AUTO_INCREMENT属性 
  • on update 对于TIMESTAMP 或 DATETIME类型的列,CURRENT_TIMESTAMP有ON UPDATE CURRENT_TIMESTAMP属性
  • VIRTUAL GENERATED 或者 VIRTUAL STORED 对于生成列的一些信息

2. 实际截图

SELECT * FROM INFORMATION_SCHEMA.COLUMNS\G

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
table_name = 'innodb_table'  AND table_schema = 'test' \G

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'innodb_table'  AND table_schema = 'test';
Image.png

或者

SHOW COLUMNS from innodb_table from test ;

show 命令只显示该表中一些栏位

第一个from后是表名,第二from后是数据库名称

也可使用如下命令显示更多栏位

SHOW FULL COLUMNS from innodb_table from test ;
Image_2.png

3. 参考链接

https://dev.mysql.com/doc/refman/5.7/en/columns-table.html