mysql 我们眼中的int(10)
自我总结,欢迎拍砖!
目的:定义int(3)和int(10)真的有区别吗?
论证:
1.创建student,student2表
分别定义一个student,student2表
create table student(id int(5) not null primary key,name varchar(20));
create table student2(id int(10) not null primary key,name varchar(20));
分别在这两个表中插入一条数据:
insert into student set id =007,name ='tom';insert into student2 set id =007,name ='tom';
查询一下两个表的记录:
select * from student,student2;
发现没什么区别。
2.增加属性值 [ zerofill ]
那么给student2表id字段加一个属性值 [ zerofill ]:
alter table student2 modify id int(10) zerofill not null; //除了id主键属性不需要重新定义,其他属性均需要重新定义
可观察一下student2表修改前后的变化:
加[ zerofill ]属性时,默认会加上unsigned修饰,则此时int的实际长度范围为:0~4294967295(int占4个字节,即32位,2^32),去除了负整数部分
此时,再查一下两个表,会发现:
student2表中id的长度为10,现在知道 [ zerofill ]属性的作用了吧:将id的值用0补全至id的长度10,舍去负整数部分
可以修改id的长度试一试,例如改成int(3),int(5),int(10),其实并不影响id的实际长度。
例如给student表写入一条记录:
insert into student set id = 555555,name ='test007';
我们会发现:
即使student表id的长度是5,也不会影响id长度大于5的记录的显示。
总结:定义数据库int字段时,一般不需要设置它的长度,若非要设置则可以加属性 [ zerofill ]区分。
PS:1)不管设置成int(?),int实际长度都是用4个字节(32位,最高位区分正负数),所以最大值为:2^31,大概20亿左右(10位10进制的数)。
2)清空表命令:truncate table student;
3)命令行执行多个SQL命令时,可以用英文状态下的分号“;”来分割。