MySQL存储过程和上次插入的行

时间:2012-05-12 02:50:19

标签: mysql stored-procedures

我很好奇这是否可能。我有一个存储过程,插入然后检索最后一个插入ID。如果两个用户同时使用该过程怎么办,这样可能会怎么样?

 User 1
             User 2
 Insert 1
             Insert 2
 GetsLastid 2
             GetsLastid 2

存储过程的2次调用是否可以插入插入查询的序列?或者一个人带头?

谢谢!

1 个答案:

答案 0 :(得分:3)

这不是问题。来自fine manual

  

生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT的最新语句生成的第一个AUTO_INCREMENT值。此值不受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。

因此last_insert_id()值始终是每个会话(AKA 连接)并且您有两个会话正在运行,不会干扰彼此的last_insert_id()值。

也就是说,抓住last_insert_id()值并在INSERT之后尽快将其存储在变量中是一个好主意。如果你做了其他事情,那么你背后会有一个INSERT - 假设你调用了另一个记录了两个月后记录日志并且日志记录执行INSERT的过程 - 你将失去你想要的last_insert_id()值。 p>