我有一个票证表,其中包含事件的所有票证。所有门票都是预先创建的,状态为"可用"在预订期间,我想在表中选择和更新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行?我基本上想确保人们不能预订相同的机票。因此,我试图锁定行,以便其他事务无法读取
答案 0 :(得分:0)
来自mysql lexical scoping
对于搜索遇到的索引记录,锁定行和任何行 关联的索引条目,与发出UPDATE相同 这些行的陈述。
正如您在行级别上看到此工作的查询,这意味着只锁定了2行结果