【问题标题】:can I trust mysql_insert_id() to return correct value, multithreading paranoia我可以相信 mysql_insert_id() 返回正确的值吗,多线程偏执狂
【发布时间】:2014-08-26 11:52:54
【问题描述】:

我做了一个在表中插入新行的函数,在mysql中调用INSERT语句后,我做一些检查,然后检查mysql_insert_id()的值。

我想保持安静,知道 在我得到 mysql_insert_id() 的结果之前,另一个线程不可能插入一行,插入一行。

我打赌它应该是安全的,但我之所以这么问是因为这可能是灾难性的。

【问题讨论】:

标签: php mysql sql multithreading mysql-insert-id


【解决方案1】:

来自manual

生成的 ID 保存在服务器上的 每个连接的基础。这意味着返回的值 给定客户端的函数是生成的第一个 AUTO_INCREMENT 值 对于影响 AUTO_INCREMENT 列的最新语句 客户。此值不会受到其他客户端的影响,即使它们 生成自己的 AUTO_INCREMENT 值。这种行为确保 每个客户端都可以检索自己的 ID 而无需担心 其他客户端的活动,并且不需要锁或 交易。

因此,如果您的线程将使用单独的连接,它们将获得不同的插入 ID。

【讨论】:

    【解决方案2】:

    是的,你可以。如果 mysql_insert_id() 可能会受到其他几乎同时命中同一 PHP 脚本的影响,那将毫无用处。

    它在每个连接的基础上工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2013-10-20
      相关资源
      最近更新 更多