结合select进行更新和限制操作,

时间:2017-06-19 15:38:23

标签: mysql

我有一个票证表,其中包含事件的所有票证。所有门票都是预先创建的,状态为"可用"在预订期间,我想在表中选择和更新N条记录,以便其他操作无法在此交易中访问:

-- get any 2 tickets that are available:
SELECT * 
from tickets 
WHERE status = 'available' 
LIMIT 2 FOR UPDATE;


--(...psuedo code: if 2 records were returned, set status to 'reserved' and update other tables , 
--otherwise rollback as all tickets could not be fulfilled)

使用进行更新,这是否可以保证其他交易不会选择相同的2行?我基本上想确保人们不能预订相同的机票。因此,我试图锁定行,以便其他事务无法读取

1 个答案:

答案 0 :(得分:0)

来自mysql lexical scoping

  

对于搜索遇到的索引记录,锁定行和任何行   关联的索引条目,与发出UPDATE相同   这些行的陈述。

正如您在行级别上看到此工作的查询,这意味着只锁定了2行结果