前言
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
类型 | 内存大小 | 范围 | 说明 |
---|---|---|---|
tinyint | 1bytes | 有符号:-128~127 无符号:0~255 | 特小型整数 |
smallint | 2bytes | 有符号:-32768~32767 无符号:0~65535 | 小型整数 |
mediumint | 3bytes | 中型整数 | |
int/integer | 4bytes | 有符号:-2^31~2^31-1 无符号:0~2^32-1 | 整数 |
bigint | 8bytes | 大型整数 | |
float | 4bytes | 单精度 | |
double | 8bytes | 双精度 | |
decimal | 对decimal(m,d) ,如果m>d,为m+2否则为d+2 | 依赖m和d | 小数值 |
字符串类型
类型 | 大小(bytes) | 说明 |
---|---|---|
char | 0~255 | 定长字符串 |
varchar | 0~65535 | 可变长度字符串 |
tinyblob | 0~255 | 不超过 255 个字符的二进制字符串 |
tinytext | 0~65535 | 短文本字符串 |
blob | 0~65535 | 二进制形式的长文本数据 |
text | 0~65535 | 长文本数据 |
mediumblob | 0~1677215 | 二进制形式的中等长度文本数据 |
mediumtext | 0~1677215 | 中等长度文本数据 |
longblob | 0~4 294 967 295 | 二进制形式的极大文本数据 |
longtext | 0~4 294 967 295 | 极大文本数据 |
日期类型
类型 | 大小 | 格式 | 说明 |
---|---|---|---|
date | 3bytes | 2023-07-14 | 日期值,只储存年月日 |
time | 3bytes | 21:30:12 | 时间值或持续时间,只储存时分秒 |
year | 1bytes | 2023 | 年份值 |
datetime | 8bytes | 2023-7-14 21:30:12 | 混合日期和时间值,储存年月日时分秒 |
timestamp | 4bytes | 20230714 213012 | 混合日期和时间值,时间截 |
常见字段约束
NOT NULL | 指定字段的值不能为空,即该字段必须包含有效数据。 |
UNIQUE | 指定字段的值必须唯一,不能有重复值。 |
PRIMARY KEY | 将字段设置为主键,主键必须满足唯一性和非空性要求。一个表只能有一个主键。 |
FOREIGN KEY | 用于建立表之间的关联关系,将一个字段作为外键与另一个表的主键相关联。 |
DEFAULT | 设置字段的默认值,当插入新记录时若未指定该字段的值,则会自动使用默认值。 |
CHECK | 定义字段的取值范围或条件,确保插入的值符合指定的条件。 |
AUTO_INCREMENT | 用于自动递增生成唯一的整数值,通常与主键一起使用。 |