美文网首页周文佳语强化班
数据库自增字段不连续问题

数据库自增字段不连续问题

作者: 史志瀚_强化班 | 来源:发表于2018-11-12 23:11 被阅读21次

在上星期完成的登录界面上发现了一个问题,如果注册帐号由于用户名已存在等问题注册不成功,即账户密码数据并未添加到数据库中,但设置的自增字段id还是会自动增加,这就导致了在下一次注册成功后id字段会出现不连续的问题,删除数据后也导致id不连续。

中间缺失的id个数即为注册失败的次数

在API上看了一遍PreparedStatement,发现没有相应的方法,倒是在网上了找到了几个方法,但试了之后也都没起效果,不过最后还是找到了一条MySQL的语句来实现

ALTER TABLE table AUTO_INCREMENT =1;

执行之后,不一定再插入的id就是1,而是表中id最大值+1。

每次执行需要和操作语句一起执行

eg:

alter table login AUTO_INCREMENT = 1;

insert into login(user_name,password) values ('aaaa', md5(123123));

aaaa的id为6

到这里,问题就变的异常简单了:在每次插入之后都重置AUTO_INCREMENT的值。

但是这样又会引出一个问题,java语句中调用sql语句每次只能写一条:

pStatement = connection.prepareStatement("insert into login(user_name,password) values(?, ?)");

为了保证两条语句同时执行必须将sql语句在一个对象中,即


pStatement = connection.prepareStatement("alter table login AUTO_INCREMENT=1; insert into login(user_name,password) values(?, ?)");


但这样写的话就会出现MySQL语法报错,又查找了一番之后找到了一个最为简单的解决办法:在MySQL的连接字符串中设置allowMultiQueries参数置为true,允许MySQL批量更新。在jdbc下设置连接字符串的时候加上&allowMultiQueries=true,即可完成MySQL的批量更新。这样几个问题就都得到解决了。

相关文章

  • 数据库自增字段不连续问题

    在上星期完成的登录界面上发现了一个问题,如果注册帐号由于用户名已存在等问题注册不成功,即账户密码数据并未添加到数据...

  • sqlldr中使用自增序列

    问题 接口文件与数据库表比较,少了一个按行自增的eventId,打算在使用sqlldr时直接加上这个自增字段 解决...

  • Sql语句

    1.不连续的天数 2.删除重复数据,前提是id自增 3.根据区间范围更新字段

  • Mybatis的一些笔记

    标签 为什么使用selectKey标签?1、数据库都有自增主键和非自增字段,当我们插入一条数...

  • 自增型主键不连续增长问题

    步长 auto_increment_increment controls the interval between...

  • MGR管理专题

    一.自增id 如果在数据库内使用到了自增的字段,最好在/etc/my.cnf中添加auto_increment_i...

  • 关于mysql自增字段问题

    最近遇到mysql字段的自增问题,需要临时处理一下,然后就顺便补补课,这样就有了这样一篇文章。 1.自增值是什么 ...

  • Excel 实现字段自增方法

    数据库维护过程需要从Excel中导入数据,数据处理时候遇到需要字段自增的问题。按照如下方法可以实现:业务场景: 第...

  • mysql同表批量增加数据

    自增字段无视

  • sql server实用sql语句

    常用SQL 新增自增字段 新增id字段,设置为自增 BETWEEN ... AND 用法(包含2020-05-21...

网友评论

    本文标题:数据库自增字段不连续问题

    本文链接:https://www.haomeiwen.com/subject/tdkhfqtx.html