假设我们在使用 MySQL的应用程序中有以下情况,其中用户可以购买商品,并且每个商品都有一个买家,但商品的价格可能会发生变化。
伪代码:
BEGIN TRANSACTION
seenPrice = SELECT price FROM Item
WHERE id = ABC AND buyer IS NULL
UPDATE Item SET buyer = X
WHERE id = ABC AND buyer IS NULL AND price = seenPrice
COMMIT
UPDATE 语句中的seenPrice
变量和buyer IS NULL AND price = seenPrice
检查用作乐观锁,以确保不会出现任何并发问题。
在多线程环境中,线程 A 和线程 B 同时通过SELECT
语句并说线程 A 先执行UPDATE
语句,然后并发性不是问题,但 A 和 B 是否有可能同时执行UPDATE
语句相同的确切时间?对于上下文,正在使用 Spring Boot 和 Spring Data JPA 开发应用程序。