2017-04-21 55 views
-2

我将第一个可用行给每个用户来作为如何在同时连接中获得第一个可用行?

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之前,它是UPDATE d为多久?

注意:它与INSERT无关。桌子已经在那里了。用户应该采取第一个可用的行。 UPDATE只是为了跟踪拍摄的行。

+1

如果ID是** ** auto_incremented,是**主键**,你不应该去关心这个。 – Dash

+0

@Maincore,除非创建另一个用户,在更新第一个用户之前。 –

+0

是的。只需使用auto_increment为你照顾这个 – Strawberry

回答

1

使用transactions

start transaction; 
SELECT @A:=id FROM table1 ORDER BY id LIMIT 1 
UPDATE table1 SET status='taken' WHERE [email protected] 
commit; 
0

Transactionless版本:

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 
+0

如果'affected_rows = 0'会怎么样?重复一遍又一遍的过程? – Googlebot

+0

由你决定。交易失败时你会怎么做(指@ ivanka-todorova的答案)? –

相关问题