乐观锁(Optimistic Locking): 乐观锁假设数据在大多数情况下不会发生冲突,因此在读取数据时不加锁,只在更新数据时检查数据是否被其他事务修改过。如果数据被修改过,则更新失败,需要重新尝试。
悲观锁(Pessimistic Locking): 悲观锁假设数据在大多数情况下会发生冲突,因此在读取数据时就加锁,防止其他事务修改数据,直到当前事务完成。
乐观锁的优势:
悲观锁的优势:
乐观锁的类型:
悲观锁的类型:
乐观锁的应用场景:
悲观锁的应用场景:
乐观锁常见问题:
悲观锁常见问题:
乐观锁示例代码:
-- 创建表时增加版本号字段
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
version INT DEFAULT 0
);
-- 插入数据
INSERT INTO users (id, name) VALUES (1, 'Alice');
-- 更新数据时检查版本号
UPDATE users SET name = 'Bob', version = version + 1 WHERE id = 1 AND version = 0;
悲观锁示例代码:
-- 使用行级锁
START TRANSACTION;
SELECT * FROM users WHERE id = 1 FOR UPDATE;
UPDATE users SET name = 'Bob' WHERE id = 1;
COMMIT;
希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云