mysql事务怎么加排他锁_八种方法实现CSS页面底部固定 - SegmentFault 思否
共享锁、排他锁
InnoDB 实现了两种类型的锁机制:共享锁(S)和排他锁(X)。共享锁允许一个事务读数据,不允许修改数据,如果其他事务要再对该行加锁,只能加共享锁;排他锁是修改数据时加的锁,可以读取和修改数据,一旦一个事务对该行数据加锁,其他事务将不能再对该数据加任务锁。
共享锁(S)
排它锁(X)
共享锁(S)
允许
不允许
排它锁(X)
不允许
不允许
x轴:事务A拥有的锁
y轴:事务B申请的锁
注:一个事务在某一行数据上加上排它锁后,其他事务不能再在这行数据加任何锁,无法进行 update 与 delete,但是普通的 select 是可以的,因为普通的 select 不加任何锁,当 select .... from ... for update 时才会加上排它锁。
并发事务带来的问题
1.数据丢失(两个事务同时修改一行数据,其中一个事务异常回滚,导致更新失败)
解决办法:未提交读(Read Uncommitted):在事务 B 读取数据时,事务 A 读取数据加了共享锁,修改数据时加了排它锁。这种隔离级别,会导致脏读、不可重复读以及幻读。
未提交读会导致脏读、不可重复读、幻读的原因:尽管 A 持有排它锁,避免了两个事务同时修改的情况,但是普通的 select 不持有锁,还是可以读到数据的,所以事务 A 多次修改数据,事务 B 中的查询还是可以看到的。
2.脏读(一个事务的执行期间,另一个事务读到了没有提交数据)
解决办法:已提交读(Read Committed):在事务 B 读取数据时增加了共享锁,一旦读取,立即释放锁,事务 A 读取修改数据时增加了行级排他锁,直到事务结束才释放锁。
也就是说,事务 B 在读取数据时,事务 A 只能读取数据,不能修改。当事务 B 读取到数据后,事务 A 才能修改。
这种隔离级别,可以避免脏读,但依然存在不可重复读以及幻读的问题。
已提交读会导致不可重复读、幻读的原因:事务 B 没有提交就将锁释放,导致事务 A 可以对数据进行任意修改,修改后,事务 B 再次获取共享锁查询,查询到跟之前读取不一致的数据。
3.不可重复读(一个事务的执行期间,另一个事务连续两次读取到的值不一样)
解决办法:可重复读(Repeatable Read):在事务 B 读取数据时增加了共享锁,事务结束,才释放锁,事务 A 读取修改数据时增加了行级排他锁,直到事务结束才释放锁。
也就是说,事务 B 在没有结束事务时,事务 A 只能读取数据,不能修改。当事务 B 结束事务,事务 A 才能修改。
这种隔离级别,可以避免脏读、不可重复读,但依然存在幻读的问题。
可重复读导致幻读的原因:可重复读是加的行级锁,而幻读是满足查询条件的前提下数据量发生变化,即发生 insert 或 delete操作。
4.幻读(一个事务的执行期间,另一个事务连续两次读取到的数量不同)
解决办法:可序列化(Serializable):在事务 A 读取数据时增加了共享锁,事务结束,才释放锁,事务 B 读取修改数据时增加了表级排他锁,直到事务结束才释放锁。
可序列化解决了脏读、不可重复读、幻读等问题,但隔离级别越来越高的同时,并发性会越来越低。
小结
可以看出,控制数据库并发带来的问题依赖的是锁粒度的扩大来解决的。
但是隔离级别越大,并发性就越差,如果业务场景允许的情况下,适当减小隔离级别是处理并发的一种手段。
mysql事务怎么加排他锁_八种方法实现CSS页面底部固定 - SegmentFault 思否相关推荐
- flex 底部固定_详解八种方法实现CSS页面底部固定
当我们在写页面时经常会遇到页面内容少的时候,footer会戳在页面中间或什么?反正就是不在最底部显示,反正就是很难看,下面要讲的布局就是解决如何使元素粘住浏览器底部, 方法一:footer高度固定+绝 ...
- mysql树形结构 无限分类_使用 authenticationDatabase 参数连接 aliyun 上的 MongoDB - SegmentFault 思否...
在一些系统中,对内容进行分类是必需的功能.比如电商就需要对商品做分类处理,以便于客户搜索:论坛也会分为很多板块:门户网站.也得对网站的内容做各种分类. 分类对于一个内容展示系统来说是不可缺少的,本博客 ...
- access 合并多行字符串_八种方法玩转字符串合并,这篇文章全都给你讲明白!...
在日常工作过程中,经常会遇到要把一串字符拼接到一起的情况. 你是不是还一直在用"&"连接符来合并字符串呢?当遇到很多个字符串需要合并的时候,这种方法又费时又费力,那有没有其 ...
- mysql 事务排他锁_[数据库事务与锁]详解六: MySQL中的共享锁与排他锁
注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大 ...
- mysql如何加悲观锁_【mysql】关于悲观锁
关于mysql中的锁 在并发环境下,有可能会出现脏读(Dirty Read).不可重复读(Unrepeatable Read). 幻读(Phantom Read).更新丢失(Lost update)等 ...
- mysql update 排他锁_数据库:Mysql中“select ... for update”排他锁分析
Mysql InnoDB 排他锁 用法: select - for update; 例如:select * from goods where id = 1 for update; 排他锁的申请前提:没 ...
- SELECT ... FOR UPDATE_手动加行级排他锁_行级写锁_行级独占锁
文章目录 介绍 加锁情况分析 明确指定主键,并且数据真实存在,锁定行 明确指定主键,但数据不存在,不加锁 主键不明确,锁定整个表 无主键,锁定整个表 应用场景 介绍 1.FOR UPDATE 加的锁是 ...
- Mysql的共享锁和排他锁(转载)
mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能 ...
- MySQL事务隔离与行锁的关系
MySQL事务隔离与行锁的关系 1. MySQL事务隔离 2. MySQL行锁 3. 事务隔离问题 1. MySQL事务隔离 MySQL事务详解 MySQL事务详解中介绍了事务隔离相关概念原理,如果是 ...
最新文章
- 报告 | 从20世纪70年代至今,自动驾驶汽车的发展经历了哪些历史性的变革?
- javascript (function(){})()
- 【LeetCode】390.消除游戏
- 体育馆黑名单系统 的设定
- OpenCV均值漂移meanshift algorithm算法的实例(附完整代码)
- 服务器防渗透(1)--信息收集
- ES5-12 【utils】继承深入、call、apply、圣杯模式、模块化
- 欢乐纪中某B组赛【2019.1.28】
- java字符编码方式总结
- SQL_create_table创建表
- 前端常用效果(3)带动画的比较型柱状图
- 你先说什么事,我再决定有没有空
- 深圳试行“智能行人过街系统”,行人违规将被“拉出来示众”
- 引入pingfang SC字体
- 微信小游戏引擎插件,Creator 使用教程!
- 百度地图API:自定义途经点路线拼接
- 计算机四级-数据库工程师(数据库原理部分)
- python生成中文字符画_在线汉字转为字符字,字符字生成器,在线生成字符字
- 2022年湖南省临床执业医师考试第三单元综合(二)
- VSTO二次开发PPT插件
热门文章
- 里程碑:BCH网络出现首例Schnorr Multisig交易
- OKEx比特币现金震荡 巴西央行公布新区块链项目
- 大数据技术学习路线,有信心能坚持学习的朋友,从现在开始吧
- 用StatSVN统计SVN服务器项目的代码量
- windows 2008+Oracle 11g R2 故障转移群集配置
- switch case in protected scope 异常解决
- SAP Basis 日常管理
- 《Pro ASP.NET MVC 3 Framework》学习笔记之十七【示例项目SportsStore】
- 从强制卸载Office到强制安装WPS
- 部门工作中的“求同存异”法则