大家好,我是Java1234_小锋老师,最近更新 《一天学会 Mysql8 视频教程(无废话版) 》专辑,感谢大家支持。
本课程主要介绍和讲解 Mysql8简介,安装以及配置,客户端sqlyog 安装以及配置,数据库基本操作,数据库表基本操作,查询数据,添加,修改,删除数据,索引,视图,触发器,常用函数,存储过程和函数。
视频教程+课件+源码打包下载:
链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234
提取码:1234
Mysql8(在第一阶段目录里)
Mysql8 数据类型简介
MySQL 8 的数据类型大致分为:数值、日期时间、字符串/二进制、JSON、空间、其他。选型时重点关注:精度、存储空间、是否受时区影响、是否可索引。
1. 数值类型
| 类型 | 说明 |
|---|---|
TINYINT | 1 字节,-128~127;UNSIGNED0~255 |
SMALLINT | 2 字节,-32768~32767 |
MEDIUMINT | 3 字节 |
INT/INTEGER | 4 字节,常用整数 |
BIGINT | 8 字节,大整数,常用作自增主键 |
DECIMAL(M,D)/NUMERIC | 定点数,精确,适合金额。M 最大 65,D 最大 30 |
FLOAT | 4 字节,近似浮点 |
DOUBLE | 8 字节,近似浮点 |
BIT(M) | 位类型,M 为 1~64 |
BOOL/BOOLEAN | 是TINYINT(1)的同义词,0/1 |
注意:MySQL 8.0.17 起,整数的显示宽度如INT(11)和ZEROFILL已弃用,不建议依赖。
2. 日期时间类型
| 类型 | 说明 |
|---|---|
DATE | 日期,YYYY-MM-DD,范围 1000-01-01 ~ 9999-12-31 |
TIME | 时间,HH:MM:SS,范围 -838:59:59 ~ 838:59:59 |
DATETIME | 日期时间,范围 1000 ~ 9999,与时区无关 |
TIMESTAMP | 时间戳,按 UTC 存储,受时区影响,范围到 2038-01-19 |
YEAR | 年份,通常 1901~2155 和 0000 |
TIME、DATETIME、TIMESTAMP支持小数秒,如DATETIME(6),精度 0~6。
3. 字符串与二进制类型
| 类型 | 说明 |
|---|---|
CHAR(M) | 定长字符串,M 为字符数,0~255 |
VARCHAR(M) | 变长字符串,M 为字符数,最大 65535 字节,受字符集和行大小限制 |
BINARY(M)/VARBINARY(M) | 定长/变长二进制串,M 为字节数 |
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT | 文本大对象,最大约 255B / 64KB / 16MB / 4GB |
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB | 二进制大对象,大小同上 |
ENUM | 枚举,只能取一个值 |
SET | 集合,可取多个值 |
JSON | 二进制存储的 JSON,自动校验,支持 JSON 函数和多值索引 |
MySQL 8 默认字符集是utf8mb4,默认排序规则通常是utf8mb4_0900_ai_ci。utf8在 MySQL 8 中是utf8mb3的别名,建议使用utf8mb4。
4. 空间类型
MySQL 8 支持 GIS 空间数据类型:
GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION
支持SRID属性,InnoDB 支持空间索引。
5. 其他重要特性
AUTO_INCREMENT:自增,通常用于整数主键。UNSIGNED:无符号,扩大正数范围。DEFAULT:默认值;MySQL 8.0.13+ 支持表达式默认值。- 生成列:
VIRTUAL/STORED,可基于其他列计算。 - 不可见列:
INVISIBLE。 CHECK约束:MySQL 8.0.16+ 正式支持。BLOB、TEXT、JSON等类型在 8.0.13+ 可用表达式方式设置默认值。
6. 选型建议
- 金额:用
DECIMAL,不要用FLOAT/DOUBLE。 - 主键:常用
BIGINT UNSIGNED AUTO_INCREMENT。 - 时间:需要时区转换用
TIMESTAMP;范围大且不想受时区影响用DATETIME。 - 普通字符串:
VARCHAR;定长短字符串:CHAR。 - 长文本:
TEXT;二进制文件:BLOB。 - 半结构化数据:
JSON,但经常查询的字段建议抽成普通列或生成列并加索引。 - 布尔值:可用
TINYINT(1)或BOOL。 - 枚举:
ENUM/SET简单但修改麻烦,复杂场景可用TINYINT+ 字典表。
总体原则:精确优先、够用就好、能索引的字段尽量用普通类型,谨慎使用大对象和 JSON。