事务T读取数据R

X锁:写锁,排它锁(exclusive locks独家排它)
T对R加X锁,T只能读取和修改,其他事务不能对R+任何锁。

S锁:读锁,共享锁(share locks)
T对R+S锁,T只能读,不能改,其他事务可以对R+S锁。

写锁挺好记的,xie,X锁

并发控制:
当多个用户同时更新运行时,用于保护数据库的完整性的各种技术

并发控制产生的问题及解决方案:

1.丢失修改,比如A改了数据C,B也改了数据C,会造成A对数据C的修改丢失,故一级封锁协议可防止丢失修改。

一级封锁协议:事务T在修改数据R之前必修加X锁,直到事务结束才释放。(也就是当事务T对R加X锁后,其他事务对R不能加任何锁)

即A在修改前对C加W锁,使B此期间不能修改与读取 不能加W锁,A修改后B获得对C加W锁 B读到的数据即为修改后的数据

2.读脏数据,B对C+20,C变70.A读取数据C为70,而另外一边B改了数据C为50,A读取了脏数据C为70。故二级封锁协议可防止丢失修改+读脏数据。

二级封锁协议:一级封锁协议+事务T在读取数据R前对其加读锁,读完后释放S锁。(其他事务可以对R加S锁,直到T释放R上的读锁)

就是B在改C之前对数据C加W锁,A此时无法对C加S锁,直到B事务释放W锁后释放W锁A获得了对C加S锁。注意读脏数据是读了一次数据库

3.不可重复读。比如A读到C为120,B进行操作:使数据C减20为100,A此时读到数据C为100。故三级封锁协议解决读脏数据+不可重复读+丢失修改

三级封锁协议:一级封锁协议+事务T在读数据R前+S锁,直到事务结束才释放

就是A在读C之前加S锁 此时B不能修改,不能加W锁,但能加R锁,这样A第二次读数据不变,注意不可重复读是读了两次数据库

详解:S锁(读锁)和X锁(写锁)相关推荐

  1. Java线程详解(5)-线程的同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public ...

  2. JUC并发编程系列详解篇十四(自旋锁 VS 适应性自旋锁)

    自旋锁 由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的线程才能够对资源进行访问,由于多线程的核心是CPU的时间分片 ...

  3. 详解 Java 常用的四种锁机制优缺点

    多线程的并发问题一直困扰着大家,Java提供了多种多线程锁机制的实现方式,接下来的话题将分为四个部分给大家讲解他们的优缺点和原理(Synchronized.ReentrantLock.Semaphor ...

  4. wow mysql dbc_DBC中悲观锁介绍附案例详解

    DBC中悲观锁介绍附案例详解 了解下DBC中悲观锁: 代码如下: BDUtils 工具类: package JDBC; import java.sql.*; public class BDUtils ...

  5. 详解ReentrantLock为什么是可重入锁

    1 缘起 有一次,公司有人在面试,路过时,听到面试官问到了锁, 让面试者聊一聊用到的锁, 我此时,也是心里一震, 我用过哪些锁?为什么使用? 搜索了好一会儿,哈哈哈,我就是这么菜. 只学习过synch ...

  6. StampedLock用法详解

    文章目录 StampedLock用法详解 前言 原因 StampedLock锁使用场景 StampedLock用法详解 前言 为什么需要用这个锁?已经有了读写锁 ReentrantReadWriteL ...

  7. java并发框架支持锁包括,jdk1.8锁

    JDK1.8有什么锁?_李广进的博客-CSDN博客 2020年4月23日 18.排他锁(不包含),X锁,若事务T对数据对象A加上x锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直 ...

  8. 12.synchronized的锁重入、锁消除、锁升级原理?无锁、偏向锁、轻量级锁、自旋、重量级锁

    小陈:呼叫老王...... 老王:来了来了,小陈你准备好了吗?今天我们来讲synchronized的锁重入.锁优化.和锁升级的原理 小陈:早就准备好了,我现在都等不及了 老王:那就好,那我们废话不多说 ...

  9. synchronized详解

    目录 1 简介 2 用法 3 原理 3.1 Monitor对象 3.2 对象的内存布局 3.2.1 对象头 3.2.2 实例数据 3.2.3 对齐填充 4 synchronized优化 4.1 偏向锁 ...

最新文章

  1. Eclipse中部署hadoop2.3.0
  2. 【Android Studio安装部署系列】十八、Android studio更换APP应用图标
  3. go语言IP转换uint32,uint32转换IP
  4. miui 8.2 android版本下载,miui8系统
  5. ssl2348-连接格点【图论,最小生成树,并查集】
  6. Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
  7. 嵌入式电路设计(linux soc电路设计)
  8. ----------------------------------------spring 整合jdbc---------------------
  9. Ubuntu18.04快捷键
  10. 如果一个人请优雅的活着。
  11. Emacs + gdb单步调试汇编代码
  12. 基于FPGA的1080P 60Hz BT1120接口调试过程记录
  13. HyperX旋火游戏鼠标推荐——轻量化鼠标设计界的艺术品
  14. 迅雷手机版苹果版_免费下载迅雷 iOS 版
  15. Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句
  16. Office 365导出PDF带备注页
  17. 如何激发员工的积极性
  18. 【SQL Server】无需公网IP,就可以远程连接SQL Server数据库
  19. c语言构建新生的学籍卡管理程序,【C语言】构建新生的学籍卡管理程序。学籍卡内容包括:学号、姓名、性别、专业等内容。...
  20. 身高和java 车架,自行车车架与身高尺寸(图文)

热门文章

  1. 高通Camera驱动(2)-- openinitialize
  2. 微信小程序实现画布各种手机尺寸自适应
  3. 智能网联汽车激光雷达工作原理、性能比较与安全性分析
  4. Xilinx Zynq实现任意波形发生器仿真
  5. No module named 'pandas.lib'
  6. 基于汇编实现的欢乐QQ堂小游戏 附完整代码
  7. java多线程------锁
  8. 学习笔记:Maxent的示例运行及部分结果解释
  9. 国内 Mono 相关文章汇总
  10. 定位python内存泄漏问题