我在代码中使用mysql_insert_id来获取自动递增。
我已经读过了,看起来不同的用户连接没有关于这个的竞争条件,但是对于同一个用户呢?当我使用相同的用户名/用户连接到数据库,但仍然来自不同的连接会话时,我可能会遇到竞争条件问题吗?
我的应用程序是PHP。当用户提交web请求时,我的PHP会执行代码,对于该特定的请求/连接会话,我会在该请求的整个长度内保持一个持久的MySQL连接。这会导致任何竞态条件问题吗?
发布于 2013-01-08 00:15:38
对于任何实际目的,如果您在执行insert之后立即执行last_id请求,那么实际上没有足够的时间让另一个insert破坏这一点。理论上可能是可能的
根据PHP Manual的说法
备注:
因为mysql_insert_id()作用于最后执行的查询,所以请确保在生成值的查询之后立即调用mysql_insert_id()。
如果你想再检查一遍,你可以使用这个函数来确认你之前的查询
mysql_info
发布于 2013-01-08 00:20:44
使用持久连接并不意味着每个请求都将使用相同的连接。这意味着每个apache线程将拥有自己的连接,该连接在该线程上执行的所有请求之间共享。
请求将串行运行(一个接一个),这意味着同一持久连接不会被同时运行的两个线程使用。
因此,插入值将是安全的,但请确保在使用它之前检查插入的结果,因为它将返回最后一次成功插入的last_insert_id,即使它不是最后执行的插入。
https://stackoverflow.com/questions/14199725
复制相似问题