mybatis的几种锁
由于对于mysql的锁机制了解的并不深入,所以翻阅了资料,整理一下自己所理解的锁。以mysql数据库的InnoDB引擎为例,因为InnoDB支持事务、行锁、表锁;且现在大部分公司使用的都是InnoDB。
mysql锁的使用离不开事务的,所以我们先上点简单的理论,了解一下事务。
1.数据库事务
事务的基本要素(ACID)
1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
3.隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
4.持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
2.隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
mysql默认的事务隔离级别为:可重复读(repeatable-read)
1 2 3 4 5 6 7 |
|
大家可以参考这个文档,写得简单清晰:https://www.cnblogs.com/huanongying/p/7021555.html
3.锁的分类
共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
说明:
1)共享锁和排他锁都是行锁,意向锁都是表锁,应用中我们只会使用到共享锁和排他锁,意向锁是mysql内部使用的,不需要用户干预。
2)对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);
对于普通SELECT语句,InnoDB不会加任何锁,事务可以通过以下语句显示给记录集加共享锁或排他锁。
共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。
排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE。
3)InnoDB行锁是通过给索引上的索引项加锁来实现的,因此InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
参考文档:https://www.cnblogs.com/fidelQuan/p/4549068.html
4.事务下锁的运行
环境配置:mysql:5.7.10 ,InnoDB引擎,事务隔离级别为:可重复读(repeatable-read)
4.1 共享锁(S)
出处:https://www.cnblogs.com/selinamee/p/9289716.html
mybatis的几种锁相关推荐
- 配置MyBatis Plus 的乐观锁功能
配置MyBatis Plus 的乐观锁功能 一. 回顾CAS乐观锁 CAS: 二. 配置MyBatis Plus 的乐观锁 (1)数据库:添加version版本号 (2)实体类:添加version版本 ...
- 24张图带你彻底理解Java中的21种锁
本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观 ...
- 浅谈Java中15种锁的分析比较
作者:站长,来自:搜云库技术团队 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类,介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
- java B锁_Java中15种锁的介绍
原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...
- java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...
(给ImportNew加星标,提高Java技能) 转自:悟空聊架 本篇主要内容如下: 本篇文章已收纳到我的 Java 在线文档. Github.我的 SpringCloud 实战项目持续更新中. 帮你 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...
- Java 并发编程必须知道的七种锁类型以及应用
锁是解决并发冲突的重要工具.在开发中我们会用到很多类型的锁,每种锁都有其自身的特点和适用范围. 需要深刻理解锁的理念和区别,才能正确.合理地使用锁. 常用锁类型 乐观锁与悲观锁 悲观锁对并发冲突持悲观 ...
- 多图带你彻底理解Java中的21种锁!
作者 | 悟空聊架构 来源 | 悟空聊架构(ID:PassJava666) 本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持 ...
最新文章
- 30+的程序猿,路在何方?
- Jürgen Schmidhuber回顾30年前旧作,称其启发了现今流行的很多概念
- 脚手架koa2+mockjs
- Move from SQL to SOQL
- NABC框架的创意之校园导航。
- python数据表_第1关:了解python数据表操作
- 写给对前途迷茫的朋友
- 何恺明团队最新研究:3D目标检测新框架VoteNet,两大数据集刷新最高精度
- 同样是程序员,为什么别人比你更优秀?
- jq向php文件传json,jQuery向后台传入json格式数据的方法
- sql server 中某个字段值合并【转】
- 小程序css 如何引用图片,微信小程序实例:如何引入外部js的文件(图文)
- 安卓音频开发(四)使用lame把wav转mp3
- 用C语言实现小写金额转大写
- 夏日汽车保养 雨季汽车保养
- 给众多IT行业开发者的一个建议,要注意避开黑心的培训机构
- matlab数学建模-神经网络感知器函数
- 怎么调整gif表情包的比例?
- 百慕大群岛失踪者再现之谜
- [IDA Plugin] IDA插件收集