当前位置: 首页 > 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;

http://www.dtcms.com/a/202712.html

相关文章:

  • 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从入门到项目实践
  • Java 05正则表达式
  • DAY28 超大力王爱学Python
  • 海外盲盒系统开发:重构全球消费体验的科技引擎
  • 探秘隐形冠军|安贝斯携手武汉科创协会x深钣协推进“江浙皖行”,揭秘华荣科技的创新破局
  • 矩阵的秩(Rank)
  • SpringBoot整合LangChain4J
  • 【JavaWeb】MyBatis
  • SAP-ABAP:SAP的`TRY...CATCH` 异常处理机制详解
  • Jenkins服务器配置密钥对
  • OpenCv高阶(8.0)——答题卡识别自动判分