文章目录
- 一、整形类型
- 1.类型名称后面的小括号
- 2.UNSIGNED(无符号)
- 3.AUTO_INCREMENT
- 二、浮点类型和定点数类型
- 三、日期和时间类型
- 总结
一、整形类型
整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表是不同整数类型之间的比对。
1.类型名称后面的小括号
该小括号的作用是指定显示宽度(并不是该类型占用字节数!)。如果不显示指定宽度则默认为tinyint(3)、 smallint(5)、 mediumint(8)、 int(11) 和 bigint(20)。一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。
举例:
use garden_baby; #选择garden_baby这个数据库
#创建一个名为baby2的数据表,id列元素不足五位的用0补齐
create table baby2(id integer(5) zerofill,name varchar(128),age int);
insert into baby2 values(1,"玛卡巴卡",19); #插入数据
insert into baby2 values(2,"唔西迪西",19);
select *from baby2; #查询baby2数据表
结果如下:
2.UNSIGNED(无符号)
如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取值范围是正常值的下限取 0,上限取原值的 2 倍,例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。如果一个列指定为 zerofill,则 MySQL 自动为该列添加 UNSIGNED 属性。
举例:
#创建表baby3,id类型为int unsigned
create table baby3(id integer(5) unsigned,name varchar(128),age int);
#创建表baby4,id类型为int unsigned
create table baby4(id integer(5) zerofill,name varchar(128),age int);
desc baby3; #描述表baby3
desc baby4; #描述表baby4
结果如下:
我们可以清楚看到,id行的类型均为unsigned类型。
3.AUTO_INCREMENT
在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。AUTO_INCREMENT 值一般从 1 开始,每行增加 1。 一个表中最多只能有一个 AUTO_INCREMENT列 。对于任何想要使用 AUTO_INCREMENT 的列,应该定义为 NOT NULL,并定义为 PRIMARY KEY 或定义为UNIQUE 键。
举例:
use garden_baby;
#创建表baby5, id 具有自增长属性
create table baby5(id integer auto_increment UNIQUE,name varchar(128),age int);
#创建表baby6, id 具有自增长属性
create table baby6(id integer auto_increment PRIMARY KEY,name varchar(128),age int);
insert into baby5 values(6,"玛卡巴卡",19);
#只在name列与age列插入元素
insert into baby5 (name,age) values("唔西迪西",19);
select * from baby5;
insert into baby5 values(10,"伊古比古",19);
insert into baby5 (name,age) values("汤姆布利柏",19);
select * from baby5;
通过上方两幅图我们还可以知道,id列永远是从该列最大值处开始加1的。
二、浮点类型和定点数类型
数据表中用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。
三种类型的区别:
1.float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
2.MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。对于decimal,M是最大位数(精度),范围是1到65。可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。(注:浮点型指定位数在后面版本将会移除)
3.FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0,即(10, 0)。
(注:当我们需要存储小数,并且有精度要求,比如存储金额时,建议使用DECIMAL字段类型!)
举例:
create database digital;
create table digital_demo(f1 float, do1 double, de1 decimal);
insert into digital_demo values(2.11111111111111111,2.11111111111111111,2.11111111111111111);
select * from digital_demo;
decimal 默认情况下保留0位小数
#保留11位数,其中包含10位小数
create table digital_demo2(f1 float(11,10), do1 double(11,10), de1 decimal(11,10));
show warnings; #查看警告
insert into digital_demo2 values(2.11111111111111111,2.11111111111111111,2.11111111111111111);
select * from digital_demo2;
warnings指出,浮点型指定位数在后面版本将会移除。
三、日期和时间类型
日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。
每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,并将零值插入到数据库中。不同的日期与时间类型均有不同的零值.插入日期时间时,日期年月日和时间时分秒可以使用 “: - _ / ”中的任意字符来分隔,但是如果是只有时间,只能使用“:”来分隔。
举例:
#创建获取时间的数据库
create database data;
use data;
create table data_demo(e_date date, e_datetime datetime, e_timestamptimestamp, e_time time, e_year year);
insert into data_demo values('2020-5-9', '2020-5-9 15:01:00', '2020-05-09 15:01:00', '15:56:01', 2011);
insert into data_demo values('2020_5/9', '2020:5-9 15/01-00', '2020:05/09 15-01_00', '15:56:01', '2011');
select * from data_demo;
结果如下:
MySQL常用的时间函数:
1.CURDATE() - 获得当前的DATE, 可直接插入DATE 类型中.
2.NOW() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中.
3.TIME() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中.
4.YEAR() - 获取参数给定时间串中的年份,可直接插入YEAR类型中.
5.MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 获取参数给定时间串中的月、日、时、分、秒值.
举例:
#使用MySQL的时间函数获取当前时间
insert into data_demo values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()));
select * from data_demo;
结果如下(红色方框中即为获取的系统时间):
总结
以上内容如若有误,还请不吝赐教,持续更新中…