详解:S锁(读锁)和X锁(写锁)
事务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锁(写锁)相关推荐
- Java线程详解(5)-线程的同步与锁
一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public ...
- JUC并发编程系列详解篇十四(自旋锁 VS 适应性自旋锁)
自旋锁 由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的线程才能够对资源进行访问,由于多线程的核心是CPU的时间分片 ...
- 详解 Java 常用的四种锁机制优缺点
多线程的并发问题一直困扰着大家,Java提供了多种多线程锁机制的实现方式,接下来的话题将分为四个部分给大家讲解他们的优缺点和原理(Synchronized.ReentrantLock.Semaphor ...
- wow mysql dbc_DBC中悲观锁介绍附案例详解
DBC中悲观锁介绍附案例详解 了解下DBC中悲观锁: 代码如下: BDUtils 工具类: package JDBC; import java.sql.*; public class BDUtils ...
- 详解ReentrantLock为什么是可重入锁
1 缘起 有一次,公司有人在面试,路过时,听到面试官问到了锁, 让面试者聊一聊用到的锁, 我此时,也是心里一震, 我用过哪些锁?为什么使用? 搜索了好一会儿,哈哈哈,我就是这么菜. 只学习过synch ...
- StampedLock用法详解
文章目录 StampedLock用法详解 前言 原因 StampedLock锁使用场景 StampedLock用法详解 前言 为什么需要用这个锁?已经有了读写锁 ReentrantReadWriteL ...
- java并发框架支持锁包括,jdk1.8锁
JDK1.8有什么锁?_李广进的博客-CSDN博客 2020年4月23日 18.排他锁(不包含),X锁,若事务T对数据对象A加上x锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直 ...
- 12.synchronized的锁重入、锁消除、锁升级原理?无锁、偏向锁、轻量级锁、自旋、重量级锁
小陈:呼叫老王...... 老王:来了来了,小陈你准备好了吗?今天我们来讲synchronized的锁重入.锁优化.和锁升级的原理 小陈:早就准备好了,我现在都等不及了 老王:那就好,那我们废话不多说 ...
- synchronized详解
目录 1 简介 2 用法 3 原理 3.1 Monitor对象 3.2 对象的内存布局 3.2.1 对象头 3.2.2 实例数据 3.2.3 对齐填充 4 synchronized优化 4.1 偏向锁 ...
最新文章
- Eclipse中部署hadoop2.3.0
- 【Android Studio安装部署系列】十八、Android studio更换APP应用图标
- go语言IP转换uint32,uint32转换IP
- miui 8.2 android版本下载,miui8系统
- ssl2348-连接格点【图论,最小生成树,并查集】
- Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
- 嵌入式电路设计(linux soc电路设计)
- ----------------------------------------spring 整合jdbc---------------------
- Ubuntu18.04快捷键
- 如果一个人请优雅的活着。
- Emacs + gdb单步调试汇编代码
- 基于FPGA的1080P 60Hz BT1120接口调试过程记录
- HyperX旋火游戏鼠标推荐——轻量化鼠标设计界的艺术品
- 迅雷手机版苹果版_免费下载迅雷 iOS 版
- Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句
- Office 365导出PDF带备注页
- 如何激发员工的积极性
- 【SQL Server】无需公网IP,就可以远程连接SQL Server数据库
- c语言构建新生的学籍卡管理程序,【C语言】构建新生的学籍卡管理程序。学籍卡内容包括:学号、姓名、性别、专业等内容。...
- 身高和java 车架,自行车车架与身高尺寸(图文)