使用MySQL最后一个插入ID为同一个用户

时间:2013-01-07 16:14:12

标签: php mysql insert race-condition

我在我的代码中使用mysql_insert_id来获得自动增量。

我已阅读并且看起来对于不同的用户连接没有关于此的竞争条件,但是同一个用户呢?使用相同的用户名/用户连接到数据库但仍然来自不同的连接会话时,我是否可能遇到竞争条件问题?

我的应用程序是PHP。当用户提交Web请求时,我的PHP执行代码并且对于该特定请求/连接会话,我将持久的SQL连接打开到MySQL中以获得该请求的长度。这会导致我遇到任何种族问题吗?

2 个答案:

答案 0 :(得分:0)

没有任何实际目的,如果你在执行插入后立即执行last_id请求,那么实际上没有足够的时间让另一个插件破坏它。从理论上讲可能是 可能的

根据PHP Manual

  

注意:

     

因为mysql_insert_id()作用于上次执行的查询,所以一定要确保   在生成的查询之后立即调用mysql_insert_id()   值。

如果您想要仔细检查,可以使用此功能确认您之前的查询

mysql_info

答案 1 :(得分:0)

使用持久连接并不意味着每个请求都将使用相同的连接。这意味着每个apache线程都有自己的连接,该连接在该线程上执行的所有请求之间共享。

请求将串行运行(一个接一个),这意味着同时运行的两个线程将不会使用相同的持久连接。

因此,您的last_insert_id值将是安全的,但请确保在使用之前检查插入的结果,因为 将返回上次成功的last_insert_id INSERT,即使它不是最后一次执行的INSERT。