我创建了一个向表中插入新行的函数,在将INSERT
语句调用到mysql之后,然后进行一些检查,然后检查mysql_insert_id()
的值。
我想要安静地知道在获得mysql_insert_id()
的结果之前,其他线程无法插入,插入行。
我敢打赌它应该是安全的,但我要问的是因为这个可能是灾难性的。
答案 0 :(得分:5)
来自manual
:
生成的ID在服务器上维护 每个连接基础。这意味着返回的值 给定客户端的函数是生成的第一个AUTO_INCREMENT值 对于影响AUTO_INCREMENT列的最新语句 客户。此值不受其他客户端的影响,即使它们也是如此 生成自己的AUTO_INCREMENT值。此行为可确保 每个客户端都可以检索自己的ID而无需担心 其他客户的活动,无需锁或 交易。
因此,如果您的线程将使用单独的连接,它们将获得不同的插入ID。
答案 1 :(得分:1)
是的,你可以。如果mysql_insert_id()可能受到同一PHP脚本的其他几乎同时命中的影响,那么它将毫无用处。
它适用于每个连接。