Java重置Mysql主键自增长值

MySql 主键自增重置器(统一处理多个表)

resetAutoincrement 是一款基于 Java 开发的程序,其功能为重置 mysql 数据库表的主键自增的值为最近的一个。

介绍

开发背景主要是工作中,测试同学在清理数据的时候,使用的是 DELETE 进行删库(其实可以使用 TRUNCATE),删库完毕后会造成主键自增的值并没有归0,而是继续计算下去(如:数据库新插入一条数据,id483 ,但是我期望的是从 1 开始),作为有点略微强迫症的小开发,我就在思考能否写一个程序来重置 Mysqlauto_increment 值,于是乎写了这个 Java 程序。

项目地址
环境说明
  • JDK:1.8
  • MySql:5.7
程序演示
视频网站地址
哔哩哔哩https://www.bilibili.com/video/av84268614
Youtubehttps://youtu.be/cd724k13Z5I
目录结构
.  
├── actuator      该目录下存放执行器接口及其实现类,整个程序的核心实现  
├── config        数据库链接的配置信息存放于此,也可以使用properties配置文件替换  
├── exception     异常类存放于此  
├── pojo          实体类存放于此   
├── run           整个程序的启动目录,执行`main`即可启动程序   
└── validation    该目录下存放校验类的信息,目前只写了一个校验数据库连接配置信息的类  
使用说明
  1. 本人测试的数据库demo sql语句
CREATE TABLE `demo` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='demo数据库';

CREATE TABLE `demo02` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `remarks` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='demo02数据库';
  1. config目录下配置好数据库的连接信息
  2. run目录下启动main方法即可执行
联系作者
  • email:chimmhuang@163.com
  • QQ:905369866
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过设增长的起始和步长来解决增长不连续的问题。可以使用 ALTER TABLE 命令来修改表的自增长属性,例如:ALTER TABLE table_name AUTO_INCREMENT = 1; 将自增长的起始为1。如果需要设步长,可以在后面加上 INCREMENT = step_value。 ### 回答2: 在MySQL数据库中,增长不连续的问题通常出现在以下情况下:删除操作后,再执行插入操作时新的记录自增与已删除记录的不连续。 解决这个问题的方法有两种: 1. 删除自增:可以通过删除当前表的所有记录,并使用ALTER TABLE语句来自增的。先使用DELETE FROM语句删除表中所有记录,再使用ALTER TABLE语句设自增的起始。 例如,假设字段名为id,表名为table_name,可以执行以下SQL语句来解决问题: DELETE FROM table_name; ALTER TABLE table_name AUTO_INCREMENT = 1; 2. 使用TRUNCATE TABLE操作:TRUNCATE TABLE语句可以一次性删除表中的所有记录,并且会自增的。这种方法相比于第一种方法更简单,但也要谨慎使用,因为TRUNCATE TABLE语句不仅会删除数据,还会删除表的结构。 例如,可以执行以下SQL语句来解决问题: TRUNCATE TABLE table_name; 无论使用哪种方法,都需要谨慎操作,以免误删除表中的数据或破坏数据完整性。在实际应用中,也要注意对于不连续的自增可能对业务逻辑带来的影响,例如可能会导致与其他表之间的关联关系失效等。因此,在设计数据库时要确保的自增不会频繁删除和插入,以避免这个问题的出现。 ### 回答3: 在MySQL数据库中,增长不连续的问题可能出现在以下情况下: 1. 删除数据:当删除了表中的某些记录后,的自增长不会改变,导致增长不连续。 2. 回滚事务:当使用事务进行插入数据操作时,如果事务被回滚,那么已经分配的自增长会被浪费,从而导致增长不连续。 解决这个问题,可以采取以下方法: 1. 使用TRUNCATE TABLE:相对于DELETE语句,使用TRUNCATE TABLE语句可以更快地删除表中的所有记录,并且的自增长为初始。 2. 使用ALTER TABLE和AUTO_INCREMENT:可以使用ALTER TABLE语句新定义表的自增长,将的自增长设为当前最大+1。 3. 使用锁表和自定义函数:可以通过对需要插入的表加锁来实现自定义的生成方式。通过自定义函数来生成,可以确保的连续增长。 4. 使用UUID或GUID作为:UUID和GUID是全局唯一标识符,可以作为来确保唯一性,同时也解决了增长不连续的问题。这种方法适用于分布式系统。 无论采用哪种方法,需要根据具体的业务需求和环境来选择合适的解决方案。在使用增长时,需要注意数据库锁的并发性能和数据一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值