乐观锁(Optimistic Locking): 乐观锁假设数据在大多数时间不会发生冲突,因此在读取数据时不加锁,只在更新数据时检查数据是否被其他事务修改过。通常通过版本号或时间戳来实现。
悲观锁(Pessimistic Locking): 悲观锁假设数据在大多数时间会发生冲突,因此在读取数据时就加锁,防止其他事务修改数据。悲观锁通常使用数据库提供的锁机制,如行锁、表锁等。
乐观锁的优势:
悲观锁的优势:
乐观锁的类型:
悲观锁的类型:
乐观锁的应用场景:
悲观锁的应用场景:
乐观锁常见问题:
-- 示例代码:使用版本号实现乐观锁
-- 假设有一个商品表 product,包含 id, name, stock, version 等字段
-- 更新库存时检查版本号
UPDATE product
SET stock = stock - 1, version = version + 1
WHERE id = 1 AND version = current_version;
悲观锁常见问题:
-- 示例代码:使用行锁实现悲观锁
-- 假设有一个订单表 orders,包含 id, product_id, quantity 等字段
-- 更新订单时加行锁
START TRANSACTION;
SELECT * FROM orders WHERE id = 1 FOR UPDATE;
UPDATE orders SET quantity = quantity - 1 WHERE id = 1;
COMMIT;
希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云