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

MySQL学习笔记4-乐观锁和悲观锁

1.定义

乐观锁和倍灌水是并发控制采用的技术手段,确保当多个数位同时对数据中同一数据存取时,不会破坏事物的隔离性、统一性和数据库统一性

乐观锁

假定不会发生并发冲突,只在提交操作时检测是否违反数据完整性
实现方式:

  • 记录数据版本,读数据,将版本标识读出,每更新一次标识也更新,当提交更新时,判断表中对应记录的当前版本信息与第一次的是否相同,如果相同则更新,否则认为数据过期
  • 给表数据列添加一个version
    特点:
    (1)效率比较高,可以一直做,直到提交时才锁定,不产生锁和死锁
    (2)当遇到并发事件时,会有问题

悲观锁

假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
实现方式:

  • 对更新的数据枷锁,在并发期间一旦有事物持有了数据库记录的锁,其他事物就不能再对数据更新了(需关闭数据库自动提交 set autocommit=0)
  • InnnoDB中使用悲观锁
select .. for update:开启排他锁
begin;
select status from goods where id=1 for update;
insert into orders(id,goods_id) values (null,1);
update goods set status=2;
commit;

特点:
先取锁再访问,安全但效率低(加锁),有死锁的可能
锁级别:
行级锁基于索引,没有索引锁整张表

http://www.lryc.cn/news/13835.html

相关文章:

  • 踩大坑:json格式存储wav二进制内容
  • 加入CSDN的一年,我收获了这些……
  • 【Python学习笔记】44.Python3 MongoDB和urllib
  • LVS中的keepalived高可用
  • 【Vue3】组件数据懒加载
  • 基于 SmartX 分布式存储的 iSCSI 与两种 NVMe-oF 技术与性能对比
  • Anaconda 安装 Pytorch
  • 从零开始使用MMSegmentation训练Segformer
  • 会利用信息差赚钱的人才是聪明人
  • 【机器学习】Adaboost
  • 深度学习神经网络基础知识(二)权重衰减、暂退法(Dropout)
  • [面试直通版]网络协议面试核心之HTTP,HTTPS,DNS-DNS安全
  • 【OJ】A+B=X
  • Python实现性能自动化测试,还可以如此简单
  • Leetcode力扣秋招刷题路-0080
  • Java实现JDBC工具类DbUtils的抽取及程序实现数据库的增删改操作
  • 【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/
  • java中NumberFormat 、DecimalFormat的介绍及使用,java数字格式化,BigDecimal数字格式化
  • 2023什么是分销商城系统?营销,核心功能
  • 天翼数字生活C++客户端实习
  • Java 接口
  • 【React】react-router 路由详解
  • DaVinci 偏好设置:系统 - 内存和 GPU
  • 视频知识点(22)- 教你认清楚YUV420P和YUV420SP的真正差异在哪里
  • 企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui
  • 面试常问-Alpha测试和Beta测试
  • html理论基础
  • 【安卓开发】数据存储全方案--详解持久化技术
  • Vue项目实战
  • Github 学生优惠包 -- 最新防踩坑指南