我在我的代码中使用mysql_insert_id来获得自动增量。
我已阅读并且看起来对于不同的用户连接没有关于此的竞争条件,但是同一个用户呢?使用相同的用户名/用户连接到数据库但仍然来自不同的连接会话时,我是否可能遇到竞争条件问题?
我的应用程序是PHP。当用户提交Web请求时,我的PHP执行代码并且对于该特定请求/连接会话,我将持久的SQL连接打开到MySQL中以获得该请求的长度。这会导致我遇到任何种族问题吗?
答案 0 :(得分:0)
没有任何实际目的,如果你在执行插入后立即执行last_id请求,那么实际上没有足够的时间让另一个插件破坏它。从理论上讲可能是 可能的
注意:
因为mysql_insert_id()作用于上次执行的查询,所以一定要确保 在生成的查询之后立即调用mysql_insert_id() 值。
如果您想要仔细检查,可以使用此功能确认您之前的查询
答案 1 :(得分:0)
使用持久连接并不意味着每个请求都将使用相同的连接。这意味着每个apache线程都有自己的连接,该连接在该线程上执行的所有请求之间共享。
请求将串行运行(一个接一个),这意味着同时运行的两个线程将不会使用相同的持久连接。
因此,您的last_insert_id
值将是安全的,但请确保在使用之前检查插入的结果,因为 将返回上次成功的last_insert_id INSERT,即使它不是最后一次执行的INSERT。