一 发现问题
- 程序跑了一段时间,发现经常报 Duplicate entry ‘911450114’ for key ‘PRIMARY’ 异常;
- 查看数据库中的id字段,发现有负值也有正值,而且都是比较大的数;
- 查看建表时设置的AUTO_INCREMENT=1,是没有问题的,但是为什么会增长这么快呢?
- 查询了一下数据库中总的数据条数,一共才200条。正常不应该有这个问题啊。
- 带着疑问,开始google查找问题,一开始怀疑是数据库本身的问题,是不是数据库id自增主键设置的有问题,查看数据发现id和插入时间一点关系都没有。而且设置的auto_increment_increment和auto_increment_offset都是对的
- 既然mysql没有问题,那是不是mybaits的问题呢,带着疑问查了一下网上的资料,查到这篇文章,https://blog.csdn.net/razorluo/article/details/106238129 mybatisplus自增主键很大问题排错
- 看到这里我去看了下我的实体类,和别的实体类对比了一下,出现问题的实体类没有标识@TableId这个注释,可能是创建实体的时候数据库还没有加自增
- `/**
- id
*/
@TableId(value = “id”, type = IdType.AUTO)
private Integer id;`
- id
- 网上查了一下,如果不标识这个的话,mybatisplus默认为IdType.ASSIGN_ID
- 在类com.baomidou.mybatisplus.core.config.GlobalConfig的DbConfig下
public DbConfig() { this.idType = IdType.ASSIGN_ID; this.tableUnderline = true; this.capitalMode = false; this.logicDeleteValue = "1"; this.logicNotDeleteValue = "0"; this.insertStrategy = FieldStrategy.NOT_NULL; this.updateStrategy = FieldStrategy.NOT_NULL; this.whereStrategy = FieldStrategy.NOT_NULL; }
@TableId注解的 类型属性来设置主键id的增长策略,一共有几个多个主键策略
1,ASSIGN_ID(雪花算法)
2,ASSIGN_UUID(排除中划线的UUID)
3,AUTO(数据库ID自增)
4,INPUT(插入前自行设置主键值)
正常我们使用的是AUTO类型,即数据库id自增即可;