数据库共享锁(读锁)和排他锁(写锁)
为了保持数据的一致性,数据库提供了事务。但是,这只能解决单个会话的问题,并不能解决并发操作下数据的一致性。
并发操作下,数据会出现以下问题:
1、修改丢失
事务A与事务B从数据库中读入同一数据并修改,事务B提交的结果破坏了事务A提交的结果,导致事务A的修改被丢失。
2、脏读
事务A修改某一数据,写回磁盘,期间事务B读取同一数据;事务A由于某种原因被撤销,数据回滚,则B读到的数据与库中真实数据不符。(这个与数据库的事务隔离级别有关,可参考拙作:mysql的4种事务隔离级别)
3、不可重复读
事务A读取数据d,期间事务B读取数据并修改,提交;则事务A中的数据与库中真实数据不符。
应对之道是引入锁。
常见的锁有排他锁(写锁)和共享锁(读锁)。
1、共享锁
共享锁的意义在于加了共享锁,其他会话就不能加排他锁,除非共享锁移除或释放。读的时候加上共享锁。注意,共享锁的特点是不一定要显式释放,一个会话A加了共享锁,会话B也可以加共享锁,那么共享锁就转移到了会话B,相当于会话A的共享锁已经释放。锁是只有一把的。
2、排他锁
加上排他锁,其他会话不能再加排他锁,除非显式释放。在修改记录的时候使用,所以也叫写锁。
数据库共享锁(读锁)和排他锁(写锁)相关推荐
- MySQL 意向共享锁、意向排他锁、死锁
文章目录 一.InnoDB表级锁 二.意向共享锁和意向排他锁(针对整表) 三.死锁 1. 数据库中的死锁 2. 死锁场景以及解决办法 3. 操作 四.锁的优化建议 一.InnoDB表级锁 我们知道,I ...
- mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...
InnoDB 锁快速到底 行锁:共享锁(S).排他锁(X) 表锁:意向共享锁(IS).意向排他锁(IX) 下面主要针对 MySQL 中行级锁中的共享锁(S)与排他锁(X)进行分析 共享锁又称为读锁,简 ...
- 重命名数据库解决“无法用排他锁锁定该数据库”
重命名数据库解决"无法用排他锁锁定该数据库" 我们在重命名数据库时会遇到很多问题, 如: 消息 5030,级别 16,状态 2,第 1 行 无法用排他锁锁定该数据库,以执行该操作. ...
- mysql锁机制(共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)的关系,死锁,乐观锁,悲观锁...)
1. 锁的基础与行锁的特点 1.1 概念 在开发多用户.数据库驱动的应用时,相当大的一个难点就是解决并发性的问题,目前比较常用的解决方案就是锁机制. 锁机制也是数据库系统区别于文件系统的一个关键特性. ...
- 详解:S锁(读锁)和X锁(写锁)
事务T读取数据R X锁:写锁,排它锁(exclusive locks独家排它) T对R加X锁,T只能读取和修改,其他事务不能对R+任何锁. S锁:读锁,共享锁(share locks) T对R+S锁, ...
- mysql 共享锁_mysql有排他锁为什么还需要共享锁呢?
两把锁缺一不可,InnoDB 引擎中的四种隔离级别就是用 排他锁 + 共享锁 实现的. 下面是个人理解,可能并不严谨. 首先说一下并发可能产生的四种问题,如果你还不了解这四个问题,最好拿至少 20 分 ...
- MySQL乐观锁、共享锁、排他锁、行锁、表锁区别和使用方法
数据库锁分类 锁模式分类 乐观锁.悲观锁 范围锁 行锁.表锁 算法锁 临间锁.间隙锁.记录锁 属性锁 共享锁(读锁).排他锁(写锁) 状态锁 意向共享锁.意向排他锁 一.乐观锁和悲观锁 1.乐观锁介绍 ...
- Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...
- mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
最新文章
- 清科-2018年中国金融科技领域10强
- 欧盟脑计划:高精度仿真「基底核」,实现自涌现「通用智能」
- mariadb数据库备份与恢复
- org.apache.flink.table.api.bridge.java.internal.BatchTableEnvironmentImpl找不到的问题
- android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...
- 小汤学编程之JAVA基础day06——面向对象(一):类与对象
- ORA-02266错误处理
- C语言dev查看调试变量,C语言程序设计-c4_C语言上机_Dev调试.doc
- python web框架哪个好_盘点:9款流行Web框架及其优缺点
- 揭秘springboot集成tomcat原理
- 读《Unity 5.x 游戏开发指南》
- 统计学习方法——机器学习和统计学习
- visual foxpro
- 谷歌浏览器元素定位神器 -- chropath插件
- php ar技术,vr和ar是什么技术,有什么区别
- 基于激光投影技术的虚拟键盘
- 【vconsole】vconsole网页调试
- 在自己电脑上用excel重新绘制荧光定量溶解曲线
- NYOJ1238 最小换乘
- UCOSII 移植文件详解——笔记
热门文章
- 深拷贝和浅拷贝的区别和与原理
- Kaggle实战(一):数据相关性分析
- Linux API-共享内存:shmget、shmat、shmdt、shmctl
- c 语言如何打开d盘文件夹,如何通过cmd命令符进入d盘以及c盘?介绍详情进入教程...
- 手把手带你玩转Spark机器学习-使用Spark进行数据降维
- 中维世纪视频汇聚,为百路以上项目提供一站式视频集中管理服务
- Streamsets简介
- 【实战】PHP如何使用 ElasticSearch 做搜索
- C# 在PPT中绘制形状(shape)
- ArcMap:第一届全国大学生GIS技能大赛(滁州学院)详解-下午题