0

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

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

我的应用程序是 PHP。当用户提交 Web 请求时,我的 PHP 会执行代码,并且对于那个特定的请求/连接会话,我会在该请求的长度内保持与 MySQL 的持久 SQL 连接。这会给我带来任何比赛条件问题吗?

4

2 回答 2

0

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

根据PHP 手册

笔记:

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

万一您想仔细检查,您可以使用此功能来确认您之前的查询

mysql_info

于 2013-01-07T16:15:38.373 回答
0

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

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

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

于 2013-01-07T16:20:44.363 回答