一、简述 

在 MySQL 中用很多类型的自增 ID,每个自增 ID 都设置了初始值。一般情况下初始值都是从 0 开始,然后按照一定的步长增加。在 MySQL 中只要定义了这个数的字节长度,那么就会有上限。
 

二、试验

数据表定义的自增 ID,如果达到上限之后。
再申请下一个 ID 的时候,获得到的值将保持不变。
我们可以通过下面这个例子来验证一下:
create table `test` (
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967295;

insert into `test` values (null);
 
 

可以从这个结果看的出来第一次插入数据的时候 ID 值还是 4294967295,

当第二次插入数据,则报主键冲突错误了,
这说明 ID 值达到上限之后,就不会再变化了。
画中话:如果预计到 ID 值可能会被用完,则应该考虑选择 bigint unsigned 类型。
 

三、总结

数据库表的自增 ID 达到上限之后,再申请时它的值就不会在改变了,继续插入数据时会导致报主键冲突错误。因此在设计数据表时,尽量根据业务需求来选择合适的字段类型。
 
12-27 02:42