Mybatis-Plus批量插入Mysql中id值自增值过大问题及解决
作者:江禾_
MyBatis-Plus批量新增数据时自增ID问题解决方案,结合数据库设置与代码注解配置,确保自增ID正确生成与使用

问题描述
使用MyBatis-Plus批量新增数据时,自增id过大,且有时为负数。
同事尝试过手动修改数据库自动递增值,导致数据库表数据操作失败,也无法删表重建。



问题排查
检查数据库和代码中和id相关的数据,发现id未设置自增类型。
Mybatis-Plus之 @TableId(value=“xxx”,type = IdType.xxx)注解
@TableId(value=“设置数据库字段值”,type = IdType.xxx)注解
| 类型 | |
| AUTO | 数据库自增ID类型可以是Interger/Long; |
| NONE | 数据库未设置主键类型 (当手动设置主键id值后插入数据库,值会按设置的值插入,若未手动设置值,值会变成一串很长的数字插入) |
| INPUT | 用户自己输入ID,如果未设置插入数据库,会报错 |
| ID_WORKER | 生成的snowflakeId 是19位的全局唯一ID, 类型必须是Long |
| UUID | 局唯一ID,类型是字符串 |
| ID_WORKER_STR | idWorker 的字符串表示, 类型是字符串 |
注意:当不添加注解时,会默认使用ID_WORKER
解决方案
根据项目需求选择对应的自增方式。
1、在对应实体类 entity 中添加 id 自增 type

2、清空数据表,重置MySQL表主键自增值
[ 运行前请自行数据备份 , 运行后原数据会丢失 ]
TRUNCATE TABLE table_name; ALTER TABLE table_name AUTO_INCREMENT = value;
例如:
alter table student_info AUTO_INCREMENT= 1;
查询修改后的自动递增值,查看是否修改成功:
select AUTO_INCREMENT FROM information_schema.tables WHERE table_name="表名" and table_schema = "数据库名称";
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
