【问题标题】: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 脚本的影响,那将毫无用处。
它在每个连接的基础上工作。