MySQL_数据表
MySQL 数据表
基本单位-列
列定义了表中数据的类型和属性
选择合适的数据类型可以节省存储空间并提高查询性能
列类型
数值类型
| 类型 | 字节 (Byte) | 范围 (有符号) |
说明 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 常用于状态码、布尔值 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 较小的计数 |
| MEDIUMINT | 3 | -838 万 ~ 838 万 | 较少用 |
| INT | 4 | -21 亿 ~ 21 亿 | 最常用,用户ID等 |
| BIGINT | 8 | -922 亿亿 ~ 922 亿亿 | 超大数值,如订单号、主键 |
| FLOAT | 4 | 单精度 | 近似值,存在精度丢失 |
| DOUBLE | 8 | 双精度 | 近似值,精度高于FLOAT |
| DECIMAL | M+2 | 精确值 | 金额首选, M为总位数,D为小数位 |
- DECIMAL 存储:并非固定字节,而是取决于定义的精度
- 时间戳存储:可以使用
BIGINT存储 13 位毫秒级时间戳
字符串类型
| 类型 | 特点 | 适用场景 |
|---|---|---|
| CHAR | 固定长度 | 存储长度固定的数据,检索速度快 |
| VARCHAR | 可变长度 | 存储长度不定的数据,节省空间 |
| TINYTEXT | 0-255 字节 | 短文本 |
| TEXT | 0-64 KB | 富文本、文章内容 |
| BLOB | 二进制大对象 | 图片、视频等二进制数据 (不建议直接存库,建议存路径) |
#注意
VARCHAR虽然节省空间,但因为长度可变,更新时可能会产生碎片,需要定期优化。
时间类型
| 类型 | 格式 | 说明 |
|---|---|---|
| DATE | YYYY-MM-DD |
仅日期 |
| TIME | HH:MM:SS |
仅时间,可表示时间段 |
| DATETIME | YYYY-MM-DD HH:MM:SS |
日期+时间,与时区无关 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS |
时间戳,受时区影响 |
| YEAR | YYYY |
年份 |
NULL 类型
- NULL:表示“没有值”或“未知”。
- 空字符串
'':表示一个长度为 0 的字符串。
#注意
在统计行数 (COUNT) 或索引时,NULL和''的行为完全不同
建议尽量使用NOT NULL并设置默认值。
其他类型
- 枚举与集合类型
- ENUM: 枚举类型
- SET: 集合类型
- 空间数据类型
- GEOMETRY
- POINT
- LINESTRING
- POLYGON
- MULTIPOINT
- MULTILINESTRING
- MULTIPOLYGON
- GEOMETRYCOLLECTION
- JSON类型
- BIT类型
列属性
| 属性 | 说明 |
|---|---|
| UNSIGNED | 无符号,禁止负数,数值范围翻倍 |
| ZEROFILL | 零填充,不足显示宽度时左侧补零(MySQL 8.0 已弃用) |
| AUTO_INCREMENT | 自增,通常用于主键,每次插入新记录时自动加 1 |
| NOT NULL | 该列不能为空值 |
| DEFAULT | 设置默认值,插入数据未指定该列时使用 |
| COMMENT | 字段注释(开发中非常重要) |