mysql数据表在定义列时,须要肯定列的数据类型,以及列的相关属性或是说约束,那么mysql的列类型大体可分为以下:
mysql
列类型可分为以下:sql
一、数值类型ide
又分为整数和小数学习
二、时间和日期类型测试
三、字符类型spa
稍微有C基础的同窗应该不是很陌生,这里呢我不会讲解太多,稍微解释一下就行。3d
整数部分blog
整数部分要注意的地方就是字节以及有符号和无符号的区别开发
咱们知晓1byte=8bit 那么2的8次方就是0-255之间get
有进制转换的同窗应该知道了,那么有符号和无符号是指他须要1位来标识正负数,因此要减去1位,天然就是7位了,2的7次方就是127了,咱们使用unsigned来标识为无符号。
字节数越大就是说位数越多8位,12位,24位,32位,64位,进行转换成10进制就获得最小值和最大值的数据了。
0000 0000 ---1111 1111 转换为10进制就是0-255 转换为16进制就是0-00ff
那么咱们在建立字段时,就要考虑该值的大体范围,如咱们要存储一我的的年龄则应该是tinyint则比较合适,从而不浪费空间,那么年龄是没有负数的因此是unsigned.
如咱们建立一个学生表
create table student(
id int,
name varchar(5),
age tinyint unsigned)
咱们发现,在建立完后,查看得知age字段的类型后面有个括号和3,这个则是表示它的显示宽度,也就是说咱们在建立字段时也能够这样建立:
age tinyint(3) 表示的是显示宽度并不会限制存储空间
字段名[列类型](显示宽度)
接下来还有一个列属性即zerofill零填充
咱们如今插入一条数据并查看
咱们并无定义它的显示宽度,接下来咱们更新一它的字段age
alter table student modify age tinyint(2) zerofill
而后再插入一条数据
insert into student values(null,'jack',8);
查看得知它会自动和在前面添加一个数字0这个就是zerofill的使用。
那么咱们规定它的宽度为2位,是否是只能插入1-99之间的数值呢?
接下来咱们插入123这个数值是否能插入进去?
咱们发现是可插入成功的,说明它并无限制存储空间。
关于其它的int,smallint,mediumint,bigint也是同样的道理。
接下来咱们来学习一下小数
小数呢也分为两类,1是浮点数 2是定点数
浮点数有单精度和双精度
单精度和双精度它们分别是32位和64位的,存储空间比较大,可是存储精度不是很高,会出现精度丢失的状况
好比咱们建立一个单精度和双精度的来测试一下其精度
alter table student add money float(8,2)//表示小数位数占两位,整数是6位
接下来咱们插入一条数据
insert into student values(null,'han',24,123456.12);
咱们发现没有什么问题,接下来咱们再插入如下几条数据
insert into student values(null,'lili',35,1234567.1);
咱们发现当整数部分超过6位数时,数据出现了很大的变化,原来插入的1234567.1并无真正的插入成功。
那咱们再从新一下该字段
alter table student change money qian float;
咱们插入如下数据
insert into student values(null,'titi',26,1234567890.1234567890);
咱们发现虽然数据好像插入成功了,但咱们检索时看到数据显示不对啊,这就是它的精度丢失了,因此说若是咱们要作一个与钱相关的系统时,对于浮点数无论是float,double仍是不要用,由于精度不高,经过测试咱们知道float的精度是6位,那么dobule的精度是16位
接下来咱们测试一 下double
altet table student change qian money double;
接下来咱们一样插入以下数据
insert into student values(null,'keke',28,1234567890.1234567890);
咱们发现,整数部分10位是正确的,但小数部分是7位数了。
咱们插入15位正数时,小数位数只有2位了,因此它的精度能够说是16位或是17位,若是咱们插入超过15位的正数时是
咱们发现它所显示的则是使用科学计术法来显示了即1.2345678901234568*10的16次方了因此它的有效范围是12345678901234568 连小数都省略了。
经过上面测试咱们发现它们的存储数据会出现精度丢失的状况。因此咱们要开发时必定要考虑他们的精度问题。一样浮点数也有有符号和无符号,咱们在定义的时候能够定义合适的整数位数和小数位数
他们的定义的格式是这样的:
float(m,d)
double(m,d) //m是表示总长度 d是表示小数位数
若是咱们插入的数据无论是整数或是小数超过的话就会出现精度丢失,因此它是对存储空间是有限制的,和整数的显示宽度是有区别的哦!