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;

mysql的avg负值 mysql存负数_字段

② zerofill 属性

 zerofill自动填充的属性,怎么自动填充了,就是当设置int(5)时,如果存储的值是10,那么显示的时候会自动在前面加000,如果存储的是100000,大于5位的话,也是正常的显示的。如果设置这个属性,那么这个字段必须是无符号的。

mysql的avg负值 mysql存负数_算法_02

int(10) 括号里面的10,并不代表存储的10个字节什么的,而是表示的是zerofill填充的位数。这块一定要理解,因为以前一直用naticat图形化建表,设置int长度时,输入一个2,以为就是两个字节或者只能2位数,现在发现原来是错误的。

mysql的avg负值 mysql存负数_自增长_03

 

mysql的avg负值 mysql存负数_mysql的avg负值_04

可以将b的 int(10) 设置 int(5); 然后填充也是5位,插入大于5位的也是可以的,看数据就知道了。b值的长度跟int(5)没有关系。只跟int类型和是否字符有关系。 

mysql的avg负值 mysql存负数_自增长_05

 

mysql的avg负值 mysql存负数_自增长_06

 

mysql的avg负值 mysql存负数_算法_07

③ 自增长  AUTO_INCREMENT 

  表示在我们不输入a的值时,这个值会自动增长。且一张表只有一个字段设置,且必须是索引。

mysql的avg负值 mysql存负数_算法_08

 返回上一次插入的自增值;

mysql的avg负值 mysql存负数_排序算法_09

 建议:

我们在系统建表的时候,在添加自增值的字段时,例如id字段,强烈建议使用bigint,不要使用int,因为int类型在互联网的今天是很容易到达的。

 注意:

在这里需要注意的一点是:当我们在t表中,最后一次自增长的时候,id是等于5时,那么我们现在执行了delete 把id=5的删除了,这时我们重启msyql后,在插入一条自增长的时候,我们的id还是从5开始的,按以前的规律来说,我们 id 应该是6的,我们这里的id是不支持回滚的,这是mysql的一个小问题。 mysql8.0后就没有这个问题了