1

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

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

存储过程的 2 次调用可以交错插入查询的顺序吗?还是有人带头?

谢谢!

4

1 回答 1

3

这不是问题。来自精美手册

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

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

也就是说,last_insert_id()在 INSERT 之后尽快获取值并将其存储在变量中是个好主意。如果您在背后执行 INSERT 的其他操作 - 假设您调用另一个过程,在两个月后添加了日志记录并且该日志记录执行 INSERT - 您将失去last_insert_id()您想要的价值。

于 2012-05-12T02:57:08.163 回答