3

我在问自己是否可以在一批 s 之后SELECT使用LAST_INSERT_ID()in Clause而不会在表中获取损坏的数据?我正在考虑多个用户同时做同样事情的场景。我开发了一个 JSF 应用程序,在该应用程序中可以实现这种情况。WHEREINSERT

在硬代码中,我的SELECTafterINSERT看起来像这样:

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();

让我对这个实现有问题还是有更好的方法?

最好的祝福

4

1 回答 1

1

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

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

MySQL Last_insert_id

于 2012-11-13T16:32:33.057 回答