mysql如何查看字段信息_mysql desc与describe

2次阅读

desc 是 describe 的缩写,功能完全相同,均用于查看表结构;但不显示注释、字符集等完整信息,需用 show full columns 或 information_schema.columns 获取。

mysql如何查看字段信息_mysql desc与describe

DESC 和 DESCRIBE 是同一个命令

mysqlDESC 就是 DESCRIBE 的缩写,不是两个不同功能的命令,执行效果完全一致。你敲 DESC table_nameDESCRIBE table_name,返回的都是字段名、类型、是否允许 NULL、键信息、默认值和额外属性这些列。

常见错误现象:有人以为 DESC 是“降序排序”,在查询语句里误写成 select * FROM t ORDER BY id DESC; 后,又单独敲 DESC t;,结果发现没报错但输出了表结构——其实是触发了表描述命令,不是排序相关。

想看更全的字段信息,用 SHOW COLUMNS 或 SHOW FULL COLUMNS

DESC 返回的信息比较精简,比如不显示字段注释(COMMENT)、字符集、排序规则,也不区分 TINYINT(1) 是布尔逻辑还是数值用途。这时候得换命令:

  • SHOW COLUMNS FROM table_name:比 DESC 多一列 Comment,但依然不显示字符集
  • SHOW FULL COLUMNS FROM table_name:真正完整,包含 CollationPrivilegesComment,还能看出字段是否由生成列表达式定义(Extra 列会写 STORED GENERATEDVIRTUAL GENERATED

使用场景:建表时加了 COMMENT '用户昵称',或者用了 utf8mb4_0900_as_cs 排序规则,DESC 完全看不到这些信息。

information_schema.columns 是唯一能跨库查字段元数据的方式

如果要查别的数据库里的表结构,或者写脚本批量分析多个表,DESCSHOW 都受限于当前 USE db_name 的上下文,没法直接指定库名前缀。这时必须查系统表:

SELECT column_name, data_type, is_nullable, column_default, extra, column_comment FROM information_schema.columns  WHERE table_schema = 'your_db' AND table_name = 'your_table' ORDER BY ordinal_position;

注意点:

  • table_schema 是数据库名,不是当前连接的库;漏写会导致查不到
  • column_comment 是真正的字段注释,SHOW FULL COLUMNS 里叫 Comment,但值一样
  • 性能影响:information_schema 查询在大库上可能稍慢,尤其 MySQL 8.0 之前,因为它是实时拼的视图

DESC 不支持通配符或模糊匹配,别指望它当搜索工具

有人试过 DESC user%DESC users.*,结果全是语法错误。MySQL 的 DESC 只接受一个确切存在的表名(可以带库前缀,如 DESC mydb.users),不支持正则、通配、模式匹配。

替代方案:

  • 查有哪些表含关键词:SHOW TABLES LIKE '%user%';
  • 查哪些字段含关键词(需先知道库和表):SELECT column_name FROM information_schema.columns WHERE table_schema='db' AND table_name='t' AND column_name LIKE '%name%';

容易踩的坑:在 navicat 或 DBeaver 这类工具里点开表结构,看到的是 GUI 封装后的结果,底层未必调的 DESC,所以复制 SQL 时要注意实际发的是什么语句。

字段信息这事,看着简单,但真要靠 DESC 搞清楚默认值是不是 NULL、有没有 ON UPDATE CURRENT_TIMESTAMP、字符集是否一致,就得切到 SHOW FULL COLUMNSinformation_schema —— 前者快,后者准,别混着用还觉得结果矛盾。

text=ZqhQzanResources