title: 字段
整数类型
MySQL中为了数据空间的有效使用,设定了5种数据类型
数值型存储在MySQL中分为有符号(有负数)和无符号(纯正数)
变量名 | 存储字节 | 范围(有符号) | 范围(无符号) | 类型 |
---|---|---|---|---|
tinyint | 1 | (-128, 127) | (0, 255) | 迷你整型 |
smallint | 2 | (-32 768,32 767) | (0,65 535) | 短整型 |
mediumint | 3 | (-8 388 608,8 388 607) | (0,16 777 215) | 中整型 |
int | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 标准整型 |
bigint | 8 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 大整型 |
浮点数
浮点数用于存储不是特别精确的数值
浮点数超过精度范围会四舍五入
变量名 | 存储字节 | 范围(有符号) | 范围(无符号) | 类型 |
---|---|---|---|---|
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL
定长型可以指定整数部分长度和小数部分的长度
- 默认不指定, 10位有效整数, 0位小数
- 可以指定decimal的有效位数和小数部分位数
- 有效位数不能超过65
字符串
CHAR | 0-255字节 | 定长字符串 |
---|---|---|
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
enum,实现将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。
enum 可以存65535个成员值
枚举的作用:
限定值的可能性!
速度快,比普通的字符串速度快!
create table demo1(
value enum('red', 'green', 'white')
);
mysql> insert into demo1 values('prink'); # 插入不存在的数据会报错
ERROR 1265 (01000): Data truncated for column 'value' at row 1
mysql> insert into demo1 values('red');
Query OK, 1 row affected (0.01 sec)
mysql> insert into demo1 values(0); # MySQL8 插入0报错不会存null值
ERROR 1265 (01000): Data truncated for column 'value' at row 1
mysql> insert into demo1 values(1);
Query OK, 1 row affected (0.01 sec)
查询映射关系
# 通过字段加0查看具体存储数值
select value, value + 0 from demo1;
字符串集合
create table demo2(
hobby set('game', 'music', 'comic')
);
mysql> insert into demo2 values('game');
Query OK, 1 row affected (0.01 sec)
mysql> insert into demo2 values('comic, music');
Query OK, 1 row affected (0.01 sec)
mysql> select * from demo2;
+-------------+
| hobby |
+-------------+
| game |
| music,comic |
+-------------+
2 rows in set (0.00 sec)
日期类型
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 字节 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 字节 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 字节 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 字节 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
年: YEAR MySQL中存储年份的类型
- MySQL中使用1个字节存储年份
- YEAR能表表示的范围是1901-2155年(256年)
- 特殊值0000 可以使用00或0000值插入
时间戳
时间戳: timestamp 基于格林尼治的时间记录
- mysql中时间戳表现形式不是秒数,而是年月日时分秒格式
- YYYY-MM-DD HH:II:SS
- YYYYMMDDHHIISS
- timestamp 使用4个字节存储
- timestamp 的特点是所对应的记录不论那个字段被更新,该字段都会更新到当前时间
创建测试表
mysql> create table time(stock int, change_time timestamp);
Query OK, 0 rows affected (0.02 sec)
插入数据
mysql> insert into time values(100, '1971-01-01 00:00:00');
Query OK, 1 row affected (0.00 sec)
mysql> insert into time values(100, 19710101000000);
Query OK, 1 row affected (0.00 sec)
mysql> select * from time;
+-------+---------------------+
| stock | change_time |
+-------+---------------------+
| 100 | 1971-01-01 00:00:00 |
| 100 | 1971-01-01 00:00:00 |
+-------+---------------------+
2 rows in set (0.00 sec)
timestamp会在自己所在记录任何位置被修改时自动更新时间
但是在MySQL8中取消了默认自动更新 需要使用on update current_timestamp
添加一个会自动更新的时间字段(MySQL8)
alter table time add n_time on update current_timestamp;
日期
日期: data用于存储年月日
- 使用3个字节存储
- 日期格式 YYYY-MM-DD
- 存储区间1000-9999年
日期时间
日期时间: datetime综合存储日期和时间
- 使用8个字节
- 存储格式 YYYY-MM-DD HH:II:SS
- 存储区间1000-01-01 00:00:00 到 9999-12-31 23:59:59