我很好奇这是否有可能。我有一个存储过程,它插入然后检索最后一个插入 id。如果两个用户同时使用该程序怎么办,这样的事情可能吗?
User 1
User 2
Insert 1
Insert 2
GetsLastid 2
GetsLastid 2
存储过程的 2 次调用可以交错插入查询的顺序吗?还是有人带头?
谢谢!
我很好奇这是否有可能。我有一个存储过程,它插入然后检索最后一个插入 id。如果两个用户同时使用该程序怎么办,这样的事情可能吗?
User 1
User 2
Insert 1
Insert 2
GetsLastid 2
GetsLastid 2
存储过程的 2 次调用可以交错插入查询的顺序吗?还是有人带头?
谢谢!
这不是问题。来自精美手册:
生成的 ID 在每个连接的基础上维护在服务器中。这意味着函数返回给给定客户端的值是为影响该客户端列的
AUTO_INCREMENT
最近语句生成的第一个值。此值不会受到其他客户端的影响,即使它们生成自己的值。AUTO_INCREMENT
AUTO_INCREMENT
因此,该last_insert_id()
值始终是每个会话(AKA连接),并且您有两个会话在玩,不能干扰彼此的last_insert_id()
值。
也就是说,last_insert_id()
在 INSERT 之后尽快获取值并将其存储在变量中是个好主意。如果您在背后执行 INSERT 的其他操作 - 假设您调用另一个过程,在两个月后添加了日志记录并且该日志记录执行 INSERT - 您将失去last_insert_id()
您想要的价值。