我很好奇这是否可能。我有一个存储过程,插入然后检索最后一个插入ID。如果两个用户同时使用该过程怎么办,这样可能会怎么样?
User 1
User 2
Insert 1
Insert 2
GetsLastid 2
GetsLastid 2
存储过程的2次调用是否可以插入插入查询的序列?或者一个人带头?
谢谢!
答案 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>