数据类型和运算符
- 1.常见的数据类型介绍
整数类型
Mysql提供的主要整数类型有:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,并且可以添加AUTO_INCREMENT自增约束条件。
类型名称 | 说明 | 存储需求 |
---|---|---|
TINYINT | 很小的整数 | 1字节 |
SMALLINT | 小整数 | 2字节 |
MEDIUMINT | 中等大小的整数 | 3字节 |
INT | 普通大小的整数 | 4字节 |
BIGINT | 大整数 | 8字节 |
CREATE TABLE tb_emp1 ( id INT (11), NAME VARCHAR (25), deptId INT (11), salary FLOAT); |
---|
如上建表语句,其中id INT(11),表示该数据类型指定的显示宽度。
显示范围和数据类型的取值范围无关,显示范围是指明mysql最大显示数字的个数,如果位数小于指定的宽度,由空格填补,如果大于指定的显示宽度,只要在取值范围之内,用select语句查询出来的数据也是可以完全显示出来的。如果在建表时不指定宽度,系统会默认给出显示宽度。
浮点数类型和定点数类型
浮点数和定点数类型表示小数。其中,浮点数类型包含单精度浮点数FLOAT和双精度浮点数DOUBLE,定点数类型只有一种DECIMAL。浮点数和定点数都可以用(M,N)表示,其中M表示的总共的位数,N表示的是小数的位数。
数据类型 | 说明 | 存储需求 |
---|---|---|
FLAOT | 单精度浮点数 | 4字节 |
DOUBLE | 双精度浮点数 | 8字节 |
DECIMAL | 压缩的严格的定点数 | M+2字节 |
无论是定点类型还是浮点类型,如果超出精度范围,都会被四舍五入处理。
比如:
CREATE TABLE tb_tmp2 ( x FLOAT(5,1), y FLOAT(5,1), z FLOAT(5,1)); INSERT INTO tb_tmp2 VALUES(5.12, 5.15, 5.123); SELECT * FROM tb_tmp2; |
---|
最后的查询结果:
如果在建表时不指定精度,则会按照默认的精度存储,由计算机的硬件和操作系统决定,DECIMAL默认为(10,1)。
在MYSQL中,DECIMAL是以字符串的形式存储的,对于精度比较高的,比如货币,科学数据,使用DECIMAL是最佳的选择。浮点数在进行加减和比较运算时容易造成问题,需要注意。
日期与时间类型
在mysql中表示日期和时间的类型主要有:DATETIME,DATE,TIMESTAMP,TIME和YEAR。
数据类型 | 日期格式 | 存储需求 |
---|---|---|
YEAR | YYYY | 1字节 |
TIME | HH:MM:SS | 3字节 |
DATE | YYYY-MM-DD | 3字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 8字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 4字节 |
YEAR:
1)4为字符串或者4位数字表示,范围:1901~2155,输入格式为'YYYY'或者YYYY。
2)以两位字符串表示YEAR,范围为'00'~'99',其中,'00'~'69'被转换为2000~2069,'70'~'99'转换为1970~1999。'0'和'00'的作用相同,超过取值范围的值被抓换成2000。
3)以两位数字表示的YEAR,范围为1~99,其中1~69转换成2001~2069,70~99被转换为1970~1999.。注意的是0会被转换成0000,而不是2000 。
CREATE TABLE tb_tmp3 ( y YEAR);INSERT INTO tb_tmp3 VALUES(2018),('2108');SELECT * FROM tb_tmp3; |
---|
结果为:
如果插入:
INSERT INTO tb_tmp3 VALUES(2166); |
---|
会报错:
[SQL]INSERT INTO tb_tmp3 VALUES(2166);[Err] 1264 - Out of range value for column 'y' at row 1 |
---|
向表中插入两位数据的字符串
INSERT INTO tb_tmp3 VALUES('0'),('00'),('77'),('10'); SELECT * FROM tb_tmp3; |
---|
结果为:
向表中插入两位数字表示的YEAR:
INSERT INTO tb_tmp3 VALUES(00),(78),(11); SELECT * FROM tb_tmp3; |
---|
结果为:
未完待续