今日份鸡汤:这一路,无论你愿意与否,我们都在边拥有边失去着,致那些我不曾想失去却依旧失去了的曾经的挚友,愿你一切安好~
问题场景:
当数据量累计到一定程度,会突然出现一个问题,就是mysql的自增主键从四位一下跳到了20位,查了一些帖子还有人出现负数的情况,不论如何修改数据库的自增方式都不起作用。
排查原因发现是引用了mybatis-plus组件,该组件会自动插入一个id到实体对象, 导致的原因:
实体类主键上面只添加了@TableId
解决办法:
第一种(推荐): 在主键上面添加注解: @TableId(value="id",type = IdType.AUTO),id为数据库索引字段,重新部署后台程序,然后重新恢复数据库表对应的自增方式,处理历史数据。设置数据库
把自动递增改成正常的数字,就是删除现在不正确的数据,然后设置成1,或者改成目前最大的一个数字,比如正常的是最大为12321,现在设置成12322。
第二种:直接修改字段为long类型, 保证有足够位数放入生成的id。
第三种:修改主键字段为字符串,使用uuid或者集群唯一id方式记录,且主键添加注解: @TableId(type = IdType.INPUT),同时在保存这张表时候,写入主键值即可。
type类型介绍:
AUTO : AUTO(0, “数据库ID自增”),
INPUT : INPUT(1, “用户输入ID”),
ID_WORKER : ID_WORKER(2, “全局唯一ID”),
UUID : UUID(3, “全局唯一ID”),
NONE : NONE(4, “该类型为未设置主键类型”),
ID_WORKER_STR : ID_WORKER_STR(5, “字符串全局唯一ID”);
具体原因可以参考:https://blog.csdn.net/razorluo/article/details/106238129