我可以信任mysql_insert_id()来返回正确的值,多线程的偏执狂

时间:2014-08-26 11:52:54

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

我创建了一个向表中插入新行的函数,在将INSERT语句调用到mysql之后,然后进行一些检查,然后检查mysql_insert_id()的值。

我想要安静地知道在获得mysql_insert_id() 的结果之前,其他线程无法插入,插入行。

我敢打赌它应该是安全的,但我要问的是因为这个可能是灾难性的。

2 个答案:

答案 0 :(得分:5)

来自manual

  

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

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

答案 1 :(得分:1)

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

它适用于每个连接。