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

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.xdnf.cn/news/7628.html

相关文章:

  • USB转TTL
  • 邂逅Node.js
  • 深度解析:AI知识库与LLM开发工具全景对比
  • Python基础学习-Day30
  • 基于R语言的贝叶斯网络建模:生态与环境因果推断实践
  • Mac如何允许安装任何来源软件?
  • srs-7.0 支持obs推webrtc流
  • LLM驱动下的软件工程再造:驾驭调试、测试与工程化管理的智能新范式
  • 高阶数据结构——AVL树的实现(详细解答)
  • vuejs处理后端返回数字类型精度丢失问题
  • ArcGIS操作16:添加经纬网
  • esp12f-实现远程控制
  • FPGA:基于Vivado的仿真流程与波形调试实践
  • 快速搭建DeepSeek本地RAG应用 - 超详细指南
  • AI无法解决的Bug系列(一)跨时区日期过滤问题
  • 【Code】Foundations 2017- Catalogue, List of Tables, List of Figures
  • 【Tools】neovim操作指南
  • 【nRF9160 常用prj.conf配置与AT指令介绍】
  • 建筑设备分散管理痛点如何解?楼宇自控系统给出破局之道
  • 编程日志5.13
  • 2025.05.20【Treemap】树图数据可视化技巧
  • 专题六:记忆化搜索(递归优化的秘密武器)
  • 深入理解Redis Cluster:架构、原理与实践
  • Oracle资源管理器
  • Oracle ASM Rebalance Power 了解
  • Linux线程互斥与同步(上)(29)
  • 2025年PMP 学习二十三 16章 高级项目管理
  • Python的sys模块:系统交互的关键纽带
  • MySQL性能调优:从查询优化到分库分表
  • ubuntu14.04/16.06 安装vscode(实测可以用)