bug记录:mysql生成id后获取出错

同事发现了两年前写的一段代码中存在的bug,该代码通过JDBC向MySQL插入数据并尝试获取最后插入的ID,但由于使用了两个不同的数据库连接导致last_insert_id()函数获取到的ID不正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天同事给我看一段代码,是我前年写的。
他发现了一个bug。
代码的作用是用jdbc向mysql中插入一条主键自增的数据,然后使用mysql的select last_insert_id()语法获取生成的主键值。
问题出在两次sql执行用的不是同一个数据库连接,而从数据源里获取了两次
我们都知道,mysql的last_insert_id()函数是针对connection的,所以这是个严重bug。
之前两年负载小,所以数据源大概每次都返回同一个connection,于是bug被遮盖住了。最近服务器压力增加,两次连接就可能不是同一个了。
因此last_insert_id()得到的主键值出错!

那时候我怎么会获取两次连接来执行一个方法里的两句sql,包括我在内所有人都莫名其妙。错误比较明显,这项目已经交接给他们了,不过出于对我的信任,还是屁颠屁颠来问我:获取两个连接是不是还有其他特殊考虑?我苦思冥想了一会,答曰:忘了。hitwall.gif

没想到我曾经养过的臭虫还到处潜伏着,等着我出丑呢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值