一.数值类型
1 . 整型:
1)大整形 int: 四个字节,取值范围: 2**32-1
2)微小整型 tinyint : 一个字节
1.有符号【正负号】(默认 signed): -128 ~ 127
2.无符号【只能正不能负】(unsigned):0 ~ 255
用法:age tinyint unsingned
3)小整型 samllint : 2个字节
4)极大整形 bigint :8个字节
2、浮点型(float 和 double)
MySQL数据类型 含义 float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位 double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位 float (4个字节,最多显示7个有效位)
用法:字段名 float(m,n) [m-------->代表总位数,n-------->代表小数位数]
3、定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。
decimal (最多显示28位有效数字)
1、decimal(m,n)
2、存储空间(整数、小数分开存储)
规则:将9的倍数包装成4个字节
余数 字节
0 0
1-2 1
3-4 2
5-6 3
7-9 4
示例:decimal(19,9)
整数部分:10/9=商1余1 4字节+1字节=5字节
小数部分:9/9=商1余0 4字节+0字节=4字节
占:9字节示例:
1、创建库 studb2 ,并在库中创建表 stuinfo,要求: id :大整型 name :字符类型,宽度为15 age :微小整型,不能为负数 height :浮点型,小数位为2位(float) money :浮点型,小数位为2位(decimal) create database studb2 character set utf8; create table stuinfo( id int, name char(15), age tinyint unsigned, height float(5,2), money decimal(20,2) ); 2、查看stuinfo的表结构 desc stuinfo; 3、查看stuinfo的默认字符集 show create database stuinfo; 4、在表中插入1条完整记录 insert into stuinfo values (1,"Bob",23,176,88888.88); 5、查询所有表记录 select * from stuinfo; 6、在表中id 、name两个字段插入2条记录 insert into stuinfo(id,name) values(2,"Jim"),(3,"Bob"); 7、查询所有学生的id和姓名 select id,name from stuinfo;
二.字符类型
类型 大小 用途 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字节 极大文本数据 1.char(宽度) 定长:字符宽度取值范围 1 ~ 255
2.varchar(宽度) 变长 : 字符宽度取值范围 1 ~ 65535
char和varchar区别:
char 无论宽度多少都会占满宽度,浪费存储空间,性能高
varchar 是多少字节就占多少字节,节省存储空间,性能低
varchar和text、blob类型的区别:
varchar和text、blob类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸。 varchar需要定义大小,有65535字节的最大限制;text则不需要。
一个blob是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。
BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。
三.枚举类型
1.单选 (enum):字段名 enum(值1,值2 . . .)
2.多选 (set):字段名 set(值1,值2 . . .)
示例:
## 插入记录时: "F,study,Python" create table t5( id int(3) zerofill, name varchar(15), sex enum("M","F","Secret"), likes set("F","M","study","Python") ); insert into t5(likes) values("F,study,Python");
四.日期时间类型
MySQL数据类型 含义 date 日期 '2008-12-2' "YYYY-MM-DD" time 时间 '12:25:36' "HH:MM:SS" datetime 日期时间 '2008-12-2 22:06:44' "YYYY-MM-DD HH:MM:SS" timestamp "YYYY-MM-DD HH:MM:SS" 这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。 注意:
datetime : 不给默认值,返回NULL值timestamp : 不给默认值,返回系统当前时间
示例:
create table t7( id int, name varchar(15), birthday date, money int, shijian datetime ); insert into t7 values(2,"王",date(now()),10000,now());
日期时间函数:
1、now() 返回服务器当前时间 ‘YYYY-MM-DD HH:MM:SS’
2、curdate() 返回当前日期
3、curtime() 返回当前时间
4、year(date) 返回指定时间的年份
5、date(date) 返回指定时间的日期
6、time(date) 返回指定时间的时间示例:
1、在表中插入3条记录 insert into t7 values (3,"小昭",19000520,3000,20180630000000), (4,"赵敏",19000521,4000,20180702000000), (5,"周芷若",19010522,3500,20180702100000); 2、查找2018年7月2日有哪些用户充值了 select * from t7 where date(shijian)="2018-07-02"; 3、查找2018年7月份充值的信息 select * from t7 where date(shijian)>="2018-07-01" and date(shijian)<="2018-07-31"; 4、查找7月30日10:00-12:00充值的信息 select * from t7 where date(shijian)="2018-07-31" and time(shijian)>="10:00:00" and time(shijian)<="12:00:00";