我想实现一个原子事务,如下所示:
BEGIN TRAN A
SELECT id
FROM Inventory
WITH (???)
WHERE material_id = 25 AND quantity > 10
/*
Process some things using the inventory record and
eventually write some updates that are dependent on the fact that
that specific inventory record had sufficient quantity (greater than 10).
*/
COMMIT TRAN A
问题是,还有其他事务消耗我们库存中的数量,所以在选择记录和在事务A中写入更新这段时间内,该记录可能成为无效选择,因为它的数量可能已经降低到WHERE子句中的阈值以下。
因此,问题是我应该在WITH子句中使用哪些锁定提示,以防止在我完成更新和提交事务之前更改所选的库存记录?
编辑:因此,多亏了John,一个好的解决方案似乎是将事务隔离级别设置为可重复读取。这将确保“在当前事务完成之前,其他事务都不能修改当前事务读取的数据”。
https://stackoverflow.com/questions/497049
复制相似问题