当前位置: 首页 > news >正文

mysql的乐观锁与悲观锁

1.悲观锁

含义:假设会发生冲突,因此在操作数据之前对数据加锁,确保其他事务无法访问该数据。

应用场景:适用于并发冲突多写多读少的场景,通过加锁的方式确保数据的安全性。

实现方式:使用行锁或表锁,例如使用 select ... for update 或 select ... lock in share mode 语句来加锁。

数据库实现悲观锁的代码示例:

-- 读取数据并加锁
SELECT id, name FROM users WHERE id = 1 FOR UPDATE;-- 执行更新操作
UPDATE users SET name = 'new_name' WHERE id = 1;

2.乐观锁

含义:假设不会发生冲突,因此在操作数据时不加锁,而是在更新数据时进行校验。如果发现数据被其事务修改,则会拒绝当前事务的修改,需重新尝试。

应用场景:适用于并发冲突少读多写少的场景,不用加锁而是通过比较字段版本号或时间戳是否发生改变的方式确保数据的安全性。

实现方式:通常通过版本号或时间戳来实现,每次更新时检查版本号或时间戳是否一致。

数据库实现乐观锁的代码示例:

-- 假设有一张用户表users,包含id、name和version字段-- 读取数据
SELECT id,name,version FROM users WHERE id = 1;-- 更新数据时检查版本号
UPDATE users SET name = "new_name",version = version + 1
WHERE id = 1 AND version = current_version;

相关文章:

  • VUE3 中的 ResizeObserver 警告彻底解决方案
  • Mysql 中的日期时间函数汇总
  • 喷涂喷漆机器人详解
  • Translational Psychiatry | 注意缺陷多动障碍儿童延迟厌恶的行为与神经功能特征茗创科技茗创科技
  • 互联网大厂面试实录:从内容社区到AIGC的Java全栈技术场景问答
  • 【华为OD-B卷-打印文件 100分(python、java、c++、js、c)】
  • 码钉枪行业2025数据分析报告
  • C++修炼:map和set的使用
  • 频分复用信号在信道中的状态
  • 粤港澳编程题
  • Wan2.1 图生视频 支持批量生成
  • 渐开线少齿差传动学习笔记
  • 【Linux】第二十二章 访问网络附加内存
  • 十大排序算法--快速排序
  • CBCharacteristic:是「特征」还是「数据通道」?
  • 独热编码笔记
  • idea本地debug断点小技巧
  • PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)
  • OpenCV图像边缘检测
  • 第11天-Python GUI开发实战:Tkinter从入门到项目实践
  • 神舟二十号航天员乘组将于近日择机实施第一次出舱活动
  • 嘴巴总是发干,喝水也不管用?小心是这几种疾病的警报
  • 中国社科院国际合作局副局长廖凡调任世界经济与政治研究所所长
  • 当文徵明“相遇”莫奈:苏博将展“从拙政园到莫奈花园”
  • 国家发改委:进一步完善促进民营经济发展的制度机制
  • 海口警方通报“司机驾车拖行虐猫”:系意外,未发现故意虐猫行为