在 MySQL 中使用 SHOW COLUMNS 查看一个表的所有的列

在 MySQL 中,SHOW COLUMNS 语句用来显示一个表的所有的列的信息。

有时候,您或许想查看一个表中的所有列的信息。MySQL 提供了两个命令帮你完成此操作:

  1. 使用 DESC 语句列出表中的列
  2. 使用 SHOW COLUMNS 语句列出表中的列

本文主要说明 SHOW COLUMNS 语句的用法。

SHOW COLUMNS 用法

要显示一个表的所有的列,请按照如下方法使用 SHOW COLUMNS 语句:

SHOW [FULL] COLUMNS FROM [database_name.]table_name [LIKE pattern]

这里,

  • database_name 是数据库的名字。当你已经选择了一个数据库作为默认数据库时, database_name. 是可以省略的。
  • table_name 是表的名字。
  • FULL 关键字用来输出更多的信息,包括:CollationPrivilegesComment。它是可选的。
  • LIKE pattern 是可选的,它用来对列名按照模式过滤。

返回的列

MySQL SHOW COLUMNS 语句总共可返回 9 个列,其中 CollationPrivilegesComment 这 3 个列只有使用了 FULL 关键字后才返回:

Field
此列的名称
Type
此列的数据类型
Null
YES 或者 NO 指示此列是否可以为 NULL
Key
此列的索引定义
Default
此列的默认值
Extra
其他的额外信息。比如 auto_increment 等。
Collation
非二进制字符串列的排序规则,其他列为 NULL
Privileges
你对此列拥有的权限。
Comment
此列的注释

MySQL DESC 实例

以下实例显示如何使用 SHOW COLUMNS 语句列出来自 Sakila 示例数据库中的表 actor 表中的列。

  1. 使用 mysql 客户端工具连接到 MySQL 服务器:

    mysql -u root -p
    

    输入 root 帐户的密码并按 Enter

    Enter password: ********
    
  2. 直接运行下面的命令尝试列出所有的列:

    SHOW COLUMNS FROM actor;
    

    此时,MySQL 会返回一个错误:ERROR 1046 (3D000): No database selected 。 因为您还未指定默认的数据库。

  3. SHOW COLUMNS 语句中指定数据库和表名:

    SHOW COLUMNS FROM sakila.actor;
    

    下面是输出:

    +-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
    | Field       | Type              | Null | Key | Default           | Extra                                         |
    +-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
    | actor_id    | smallint unsigned | NO   | PRI | NULL              | auto_increment                                |
    | first_name  | varchar(45)       | NO   |     | NULL              |                                               |
    | last_name   | varchar(45)       | NO   | MUL | NULL              |                                               |
    | last_update | timestamp         | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
    +-------------+-------------------+------+-----+-------------------+-----------------------------------------------+
  4. 使用 SHOW FULL COLUMNS 语句显示完整的列信息:

    SHOW FULL COLUMNS FROM sakila.actor;
    

    下面是输出:

    +-------------+-------------------+--------------------+------+-----+-------------------+-----------------------------------------------+---------------------------------+---------+
    | Field       | Type              | Collation          | Null | Key | Default           | Extra                                         | Privileges                      | Comment |
    +-------------+-------------------+--------------------+------+-----+-------------------+-----------------------------------------------+---------------------------------+---------+
    | actor_id    | smallint unsigned | NULL               | NO   | PRI | NULL              | auto_increment                                | select,insert,update,references |         |
    | first_name  | varchar(45)       | utf8mb4_0900_ai_ci | NO   |     | NULL              |                                               | select,insert,update,references |         |
    | last_name   | varchar(45)       | utf8mb4_0900_ai_ci | NO   | MUL | NULL              |                                               | select,insert,update,references |         |
    | last_update | timestamp         | NULL               | NO   |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | select,insert,update,references |         |
    +-------------+-------------------+--------------------+------+-----+-------------------+-----------------------------------------------+---------------------------------+---------+

    这里,相比较上面的输出,使用 FULL 关键字后,输出中多了 3 个列 CollationPrivilegesComment

  5. 使用 USE 命令设置默认的数据库:

    USE sakila;
    
  6. 直接运行下面的命令尝试列出所有的列:

    SHOW FULL COLUMNS FROM actor;
    

    此时, 此命令的输出和上面的命令 SHOW FULL COLUMNS FROM sakila.actor; 相同。这是因为此时的默认数据库是 sakila

  7. 使用 LIKE 过滤出列名以 a 开头的所有的列:

    SHOW COLUMNS FROM actor LIKE 'a%';
    

    下面是输出:

    +----------+-------------------+------+-----+---------+----------------+
    | Field    | Type              | Null | Key | Default | Extra          |
    +----------+-------------------+------+-----+---------+----------------+
    | actor_id | smallint unsigned | NO   | PRI | NULL    | auto_increment |
    +----------+-------------------+------+-----+---------+----------------+

结论

在本文中,您学习了在 MySQL 中如何使用 SHOW COLUMNS 语句列出一个表的所有的列:

  • 使用 FULL 关键字可以输出更多的信息
  • 使用 LIKE 可以按字段的名称对结果进行过滤