目录
约束条件
MySQL数据类型
1、数值类型
2、字符串类型
3、日期时间类型
源码等资料获取方法
约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。
常用约束条件如下:
MySQL支持多种类型的SQL数据类型:数值,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型等
数据类型描述使用以下约定:
在MySQL中常用数据类型主要分为以下几类
数值类型包括整数型、浮点型、定点型
1.1 整数型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
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或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
有符号表示数值可以为负数,无符号表示数值为非负数,如果不手动指定UNSIGNED,那么默认就是有符号的。
创建一个表
CREATE TABLE int_db( a TINYINT, b SMALLINT, c MIDDLEINT, d INT, e BIGINT );
查看表结构
我们来看看type这一列,可以看到,每个字段类型后面都有一个括号,括号里面的有个数值,这个数值实际上就是字段的显示宽度,也就是M的值,M表示整数类型的最大显示宽度。最大显示宽度为255.显示宽度与类型可包含的值范围无关
我们在创建表的时候并没有指定字段类型的显示宽度,那么,默认的显示宽度则是该字段类型最大的显示宽度
例如字段a的显示宽度为4,是因为TINYINT有符号值的范围是-128到127,
-128的长度为4(负号、1、2、8共四位),所以默认的显示宽度最大为4,其他的以此类推
下面我们再新建一个表,将字段a的修改为无符号类型
CREATE TABLE int_db( a TINYINT UNSIGNED, b SMALLINT, c MIDDLEINT, d INT, e BIGINT );
再看看a字段的默认显示宽度
可以看到,默认显宽度就变成3了,因为无符号的TINYINT的值范围为0-255,没有负号,所以最多是3位。
ZEROFILL
使用该约束后当数据的长度比我们指定的显示宽度小的时候会使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
新建个表试一下
CREATE TABLE int_db2( a TINYINT(8) ZEROFILL, b TINYINT(5) UNSIGNED );
插入一条记录
INSERT int_db2() VALUES(12,12);
可以看到,12变成了00000012,自动在前面补了0,这是因为指定的显示宽度是8,但是12只有两位,所以在前面补0,使长度为8。这就是ZEROFILL的效果
1.2 浮点型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
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) | 双精度 浮点数值 |
创建表
CREATE TABLE float_db( a FLOAT(3,2), b DOUBLE(5,3) );
指定a字段为FLOAT类型,字段总长度为3,小数点后长度为2,b字段为DOUBLE类型,字段总长度为5,小数点后长度为3
插入数据
INSERT float_db VALUES(1.1111,2.2222);
可以看到,我们给a字段的值是1.1111,但是只存进去了1.11 ,给b字段的值是2.2222,但是只存进去了2.222
也就是说 FLOAR 和 DOUBLE 类型存储的小数位数与类型关系不打。
在这里我建议,干脆忘记mysql有double这个数据类型。
常用的字符串类型有如下
2.1 CHAR和VARCHAR
创建表
CREATE TABLE str_db( a CHAR(4), b VARCHAR(4));
插入数据
INSERT str_db() VALUES("",""); INSERT str_db() VALUES("ab","ab"); INSERT str_db() VALUES("abcd","abcd"); INSERT str_db() VALUES("abcdefg","abcdefg"); #在严格模式下,该条数据会插入失败,非严格模式则会对数据进行截取
我们看到查询的结果是一样的,但实际上他们存储时占用的长度是不一样的。
CHAR类型不管存储的值的长度是多少,都会占用M个字节,而VARCHAR则占用实际长度+1个字节。
但是CHAR的查询效果要高于VARCHAR,所以说,如果字段的长度能够确定的话,比如手机号,身份证号之类的字段,可以用CHAR类型,像地址,邮箱之类的就用VARCHAR
2.2 TEXT系列
TEXT系列的存储范围比VARCHAR要大,当VARCHAR不满足时可以用TEXT系列中的类型。需要注意的是TEXT系列类型的字段不能有默认值,在检索的时候不存在大小写转换,没有CHAR和VARCHAR的效率高
2.3 ENUM 枚举类型
创建表
CREATE TABLE enum_db(gender ENUM("男","女"));
插入数据
INSERT enum_db() VALUES("男"); INSERT enum_db() VALUES(1); #也可以使用编号插入值,等同于"男",序号从1开始 INSERT enum_db() VALUES("女"); INSERT enum_db() VALUES(2); #等同于"女"
下面我们插入一条不是枚举集合中的数据试一下
MySQL中的常用数据类型大概就这些。我们在数据类型的选择上,数据类型能满足使用就行的,越小越好,比如人的年龄,任何整数类型都可以,但是我们一般使用TINYINT类型。
各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!
三连之后我会在评论区挨个私信发给你们~