MySQL查看表结构
MySQL查看表结构
引言
接手老库、写SQL、加字段前,先看清表里有哪些列、类型、主键、索引和默认值。DESC看字段概览,SHOW CREATE TABLE拿到完整建表语句,information_schema可批量查元数据。
DESC看字段概览
DESC users;
-- 等价
DESCRIBE users;
输出Field、Type、Null、Key、Default、Extra六列,快速看字段类型和是否主键。
完整建表语句
SHOW CREATE TABLE users;
拿到原始CREATE TABLE,包含引擎、字符集、索引、外键、注释,迁移和备份最有用。
查看表索引
SHOW INDEX FROM users;
看有哪些索引、唯一性、列顺序,分析慢查询时用。
查表状态和引擎
SHOW TABLE STATUS LIKE 'users';
看引擎、行数、行格式、数据和索引大小、自增值。
information_schema批量查
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='users';
程序里动态读表结构、批量比对字段时用。
注意事项
- DESC不显示完整索引和外键,要看SHOW CREATE TABLE;
- 大表SHOW TABLE STATUS的行数是估算值,非精确;
- 看字段注释用information_schema的COLUMN_COMMENT;
- 修改结构前先SHOW CREATE TABLE留底;
- 区分NULL和默认空串,Default列直接体现;
- 自增字段在Extra列显示auto_increment。
总结
日常DESC快速看字段,要完整定义用SHOW CREATE TABLE,查索引用SHOW INDEX,看容量引擎用SHOW TABLE STATUS,脚本批量取元数据查information_schema。改结构前先把建表语句留底,避免误删索引或默认值。
MySQL查看表结构,desc和show create table
前言
接手别人的项目,不知道表有哪些字段、什么类型、有没有索引,全靠DESC和SHOW CREATE TABLE。
一、查看表有哪些字段
方法1:DESC(最常用)
DESC users;
或者:
DESCRIBE users;
输出:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | NULL | ||
| age | int(11) | YES | NULL |
每列含义:
- Field:字段名
- Type:字段类型
- Null:能不能为NULL
- Key:有没有索引
- Default:默认值
- Extra:额外属性(自增等)
方法2:SHOW COLUMNS
SHOW COLUMNS FROM users;
和DESC效果一样,写法不同而已。
二、查看建表语句
SHOW CREATE TABLE
SHOW CREATE TABLE users;
输出:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
这个命令能看到:
- 完整的建表SQL
- 所有字段和类型
- 主键、索引
- 表引擎、字符集
- 默认值、自增等
三、查看表状态
SHOW TABLE STATUS LIKE 'users'\G
能看到:
- 表行数
- 数据大小
- 索引大小
- 更新时间
- 引擎类型
- 字符集
四、查看表的所有索引
SHOW INDEX FROM users;
或者:
SHOW KEYS FROM users;
五、查看数据库里所有表
SHOW TABLES;
六、实用组合
查看所有表的表名
SHOW TABLES;
查看某库的表
USE 数据库名;
SHOW TABLES;
或者:
SHOW TABLES FROM 数据库名;
七、从information_schema查
更灵活的方式,从系统表查:
查表的字段信息
SELECT * FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mydb'
AND TABLE_NAME = 'users';
查表的索引信息
SELECT * FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
AND TABLE_NAME = 'users';
常见坑
坑1:DESC看不到索引详细信息
DESC只告诉你Key列是啥,但不知道索引名。
解决: 用 SHOW INDEX FROM 表名;
坑2:SHOW CREATE TABLE输出太长
直接看会换行很乱。
解决: 加 \G 按行显示:
SHOW CREATE TABLE users\G
坑3:不知道当前在哪个库
查的时候报错说表不存在。
解决: 先 SELECT DATABASE(); 看当前库。
坑4:表名大小写问题
Linux下MySQL表名区分大小写,Windows不区分。
解决: 表名小写,开发时注意。
总结
常用命令总结:
| 命令 | 作用 |
|---|---|
DESC 表名 |
看字段列表 |
SHOW CREATE TABLE 表名 |
看完整建表语句 |
SHOW INDEX FROM 表名 |
看索引 |
SHOW TABLES |
看所有表 |
SHOW TABLE STATUS |
看表状态 |
记住: 看表结构首选DESC,要看完整建表语句用SHOW CREATE TABLE。
遇到问题加QQ23979811 协助处理