小数
小数说的是啥?它其实有两种类型;一种是浮点数
类型,一种是定点数
类型;
浮点数有两种
- 单精度浮点型 - float 型
- 双精度浮点型 - double 型
定点数只有一种 decimal
。定点数在 MySQL 内部中以字符串的形式存在,比浮点数更为准确,适合用来表示精度特别高的数据。
浮点数和定点数都可以使用 (M,D)
的方式来表示,M 表示的就是 「整数位 + 小数位」 的数字,D 表示位于 .
后面的小数。M 也被称为精度 ,D 被称为标度。
下面通过示例来演示一下
首先建立一个 test2
表
CREATE TABLE test2 (aId float(6,2) default NULL, bId double(6,2) default NULL,cId decimal(6,2) default NULL)
然后向表中插入几条数据
insert into test2 values(1234.12,1234.12,1234.12);
这个时候显示的数据就是
发现插入完成后还显示的是 1234.12
,小数位第三位的值被舍去了。
现在我们把 test2 表中的精度全部去掉,再次插入
alter table test2 modify aId float; alter table test2 modify bId double; alter table test2 modify cId decimal;
先查询一下,发现 cId 舍去了小数位。
然后再次插入 1.23,SQL 语句如下
insert into test2 values(1.23,1.23,1.23);
结果如下
这个时候可以验证
- 浮点数如果不写精度和标度,会按照实际的精度值进行显示
- 定点数如果不写精度和标度,会按照
decimal(10,0)
来进行操作,如果数据超过了精度和标题,MySQL 会报错
位类型
对于位类型,用于存放字段值,BIT(M)
可以用来存放多位二进制数,M 的范围是 1 - 64,如果不写的话默认为 1 位。
下面我们来掩饰一下位类型
新建一个 test3 表,表中只有一个位类型的字段
create table test3(id bit(1));
然后随意插入一条数据
insert into test3 values(1);
发现无法查询出对应结果。
发现能够查询出对应结果。
也就是说当数据插入 test3 时,会首先把数据转换成为二进制数,如果位数允许,则将成功插入;如果位数小于实际定义的位数,则插入失败。如果我们像表中插入数据 2
insert into test3 values(2);
那么会报错
日期时间类型
MySQL 中的日期与时间类型,主要包括:「YEAR、TIME、DATE、DATETIME、TIMESTAMP」,每个版本可能不同。下表中列出了这几种类型的属性。
下面分别来介绍一下
YEAR
YEAR 可以使用三种方式来表示
- 用 4 位的数字或者字符串表示,两者效果相同,表示范围 1901 - 2155,插入超出范围的数据会报错。
- 以 2 位字符串格式表示,范围为 ‘00’~‘99’。‘00’~‘69’ 表示 2000~2069,‘70’~‘99’ 表示1970~1999。‘0’ 和 ‘00’ 都会被识别为 2000,超出范围的数据也会被识别为 2000。
- 以 2 位数字格式表示,范围为 1~99。1~69 表示 2001~2069, 70~99 表示 1970~1999。但 0 值会被识别为0000,这和 2 位字符串被识别为 2000 有所不同
下面我们来演示一下 YEAR 的用法,创建一个 test4 表
create table test4(id year);
然后我们看一下 test4 的表结构
默认创建的 year 就是 4 位,下面我们向 test4 中插入数据
insert into test4 values(2020),('2020');
然后进行查询,发现表示形式是一样的
使用两位字符串来表示
delete from test4; insert into test4 values ('0'),('00'),('11'),('88'),('20'),('21');
使用两位数字来表示
delete from test4; insert into test4 values (0),(00),(11),(88),(20),(21);
发现只有前两项不一样。
TIME
TIME 所表示的范围和我们预想的不一样
我们把 test4 改为 TIME 类型,下面是 TIME 的示例
alter table test4 modify id TIME; insert into test4 values ('15:11:23'),('20:13'),('2 11:11'),('3 05'),('33');
结果如下
DATE
DATE 表示的类型有很多种,下面是 DATE 的几个示例
create table test5 (id date);
查看一下 test5 表
DATE 的表示一般很多种,如下所示 DATE 的所有形式
- 'YYYY-MM-DD'
- 'YYYYMMDD'
- YYYYMMDD
- 'YY-MM-DD'
- 'YYMMDD'
- YYMMDD