周文佳语强化班

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

2018-11-12  本文已影响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的批量更新。这样几个问题就都得到解决了。

上一篇 下一篇

猜你喜欢

热点阅读