Php 如何获取同步连接中的第一个可用行?

Php 如何获取同步连接中的第一个可用行?,php,mysql,Php,Mysql,我将第一个可用行分配给每个即将到来的用户 SELECT id FROM table1 WHERE status IS NULL ORDER BY id LIMIT 1 fetched id is xxx UPDATE table1 SET status='taken' WHERE id=xxx 我如何确保在更新相同id之前没有第二个用户检索到该id 注意:它与插入无关。桌子已经在那儿了。用户应选择第一个可用行。更新只是为了跟踪记录的行。使用: 无事务版本: SELECT id FROM tab

我将第一个可用行分配给每个即将到来的用户

SELECT id FROM table1 WHERE status IS NULL ORDER BY id LIMIT 1
fetched id is xxx
UPDATE table1 SET status='taken' WHERE id=xxx
我如何确保在更新相同id之前没有第二个用户检索到该id

注意:它与插入无关。桌子已经在那儿了。用户应选择第一个可用行。更新只是为了跟踪记录的行。

使用:


无事务版本:

SELECT id FROM table1 WHERE status != 'taken' ORDER BY id LIMIT 1
fetched id is xxx
UPDATE table1 SET status='taken' WHERE id=xxx AND status != 'taken'
check number of affected rows

如果id是自动递增的,并且是主键,则不必关心此问题。@Maincore除非在更新第一个用户之前创建了另一个用户。是。只需使用自动增量来处理此问题you@IvankaTodorova不。这与此无关。为什么不使用子查询作为更新表1设置status='take',其中id=从表1中选择id按id限制排序1如果受影响怎么办\u rows=0?一次又一次地重复这个过程?真的取决于你。参照@ivanka todorova的答案,当交易失败时,你会怎么做?
SELECT id FROM table1 WHERE status != 'taken' ORDER BY id LIMIT 1
fetched id is xxx
UPDATE table1 SET status='taken' WHERE id=xxx AND status != 'taken'
check number of affected rows