INSERT Batch之后我可以用LAST_INSERT_ID()进行SELECT选择吗?

时间:2012-11-13 15:25:35

标签: java mysql jdbc

我问自己,SELECT之后LAST_INSERT_ID() WHERE INSERT是否有可能在一批SELECT之后没有获得表中的损坏数据?我正在考虑多个用户同时做同样事情的场景。我开发了一个可以实现这种情况的JSF应用程序。

在硬代码中INSERT之后的preparedstatement.addBatch( "INSERT INTO table1(all the FIELDS)" + "VALUES(null, ...);" ); preparedstatement.addBatch( "INSERT INTO table2(all the FIELDS)" + "VALUES(null, LAST_INSERT_ID(), ...);" ); preparedstatement = connect.prepareStatement( "SELECT id FROM table3 WHERE id = LAST_INSERT_ID();" ); preparedstatement.executeBatch(); resultSet = preparedstatement.executeQuery(); 看起来像这样:

{{1}}

让我对此实现有疑问,还是有更好的方法?

最好的问候

1 个答案:

答案 0 :(得分:1)

你应该没问题,引用MySQL的文档:

  

生成的ID在服务器上维护   每个连接基础。这意味着返回的值   给定客户端的函数是生成的第一个AUTO_INCREMENT值   对于影响AUTO_INCREMENT列的最新语句   客户。此值不受其他客户端的影响,即使它们也是如此   生成自己的AUTO_INCREMENT值。此行为可确保   每个客户端都可以检索自己的ID而无需担心   其他客户的活动,无需锁或   交易。

MySQL Last_insert_id