INT类型
① signed 和 unsigned 是否有字符
signed 有字符,代表可以插入负数,其区间就是如下图
占用空间 | 最小值 | 最大值 | |
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
unsigned 无字符串,代表都是大于等于0的存储,其区间就是如下图
占用空间 | 最小值 | 最大值 | |
TINYINT | 1 | 0 | 2的8次方 - 1 |
SMALLINT | 2 | 0 | 2的16次方 - 1 |
MEDIUMINT | 3 | 0 | 2的24次方 - 1 |
INT | 4 | 0 | 2的32次方 - 1 |
BIGINT | 8 | 0 | 2的64次方 - 1 |
注意
TINYINT类型 1个字节 1个字节=8bit
1 bytes = 8 bit 那么8bit可以放2的8次方个数字,就是256个数字,signed有符号类型256个数字要需要放 负数和0 那么就是 -128~0~127 这些数字,那么区间就是-128到127. unsigned无符号类型则可以放0~255;
unsigned 和 signed的区别就是有没有负数,但是设置了unsigned无符号的字段,插入了负数,那么就会报错。 所以建议除非很特殊的情况,还是不需要设置这个unsigned;
② zerofill 属性
zerofill自动填充的属性,怎么自动填充了,就是当设置int(5)时,如果存储的值是10,那么显示的时候会自动在前面加000,如果存储的是100000,大于5位的话,也是正常的显示的。如果设置这个属性,那么这个字段必须是无符号的。
int(10) 括号里面的10,并不代表存储的10个字节什么的,而是表示的是zerofill填充的位数。这块一定要理解,因为以前一直用naticat图形化建表,设置int长度时,输入一个2,以为就是两个字节或者只能2位数,现在发现原来是错误的。
可以将b的 int(10) 设置 int(5); 然后填充也是5位,插入大于5位的也是可以的,看数据就知道了。b值的长度跟int(5)没有关系。只跟int类型和是否字符有关系。
③ 自增长 AUTO_INCREMENT
表示在我们不输入a的值时,这个值会自动增长。且一张表只有一个字段设置,且必须是索引。
返回上一次插入的自增值;
建议:
我们在系统建表的时候,在添加自增值的字段时,例如id字段,强烈建议使用bigint,不要使用int,因为int类型在互联网的今天是很容易到达的。
注意:
在这里需要注意的一点是:当我们在t表中,最后一次自增长的时候,id是等于5时,那么我们现在执行了delete 把id=5的删除了,这时我们重启msyql后,在插入一条自增长的时候,我们的id还是从5开始的,按以前的规律来说,我们 id 应该是6的,我们这里的id是不支持回滚的,这是mysql的一个小问题。 mysql8.0后就没有这个问题了