由于对于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

mysql> select @@tx_isolation;

+-----------------+

| @@tx_isolation  |

+-----------------+

REPEATABLE-READ |

+-----------------+

1 row in set (0.00 sec)

大家可以参考这个文档,写得简单清晰: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的几种锁相关推荐

  1. 配置MyBatis Plus 的乐观锁功能

    配置MyBatis Plus 的乐观锁功能 一. 回顾CAS乐观锁 CAS: 二. 配置MyBatis Plus 的乐观锁 (1)数据库:添加version版本号 (2)实体类:添加version版本 ...

  2. 24张图带你彻底理解Java中的21种锁

    本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观 ...

  3. 浅谈Java中15种锁的分析比较

    作者:站长,来自:搜云库技术团队 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类,介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享 ...

  4. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

  5. java B锁_Java中15种锁的介绍

    原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...

  6. java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...

    (给ImportNew加星标,提高Java技能) 转自:悟空聊架 本篇主要内容如下: 本篇文章已收纳到我的 Java 在线文档. Github.我的 SpringCloud 实战项目持续更新中. 帮你 ...

  7. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...

  8. Java 并发编程必须知道的七种锁类型以及应用

    锁是解决并发冲突的重要工具.在开发中我们会用到很多类型的锁,每种锁都有其自身的特点和适用范围. 需要深刻理解锁的理念和区别,才能正确.合理地使用锁. 常用锁类型 乐观锁与悲观锁 悲观锁对并发冲突持悲观 ...

  9. 多图带你彻底理解Java中的21种锁!

    作者 | 悟空聊架构 来源 | 悟空聊架构(ID:PassJava666) 本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持 ...

最新文章

  1. 30+的程序猿,路在何方?
  2. Jürgen Schmidhuber回顾30年前旧作,称其启发了现今流行的很多概念
  3. 脚手架koa2+mockjs
  4. Move from SQL to SOQL
  5. NABC框架的创意之校园导航。
  6. python数据表_第1关:了解python数据表操作
  7. 写给对前途迷茫的朋友
  8. 何恺明团队最新研究:3D目标检测新框架VoteNet,两大数据集刷新最高精度
  9. 同样是程序员,为什么别人比你更优秀?
  10. jq向php文件传json,jQuery向后台传入json格式数据的方法
  11. sql server 中某个字段值合并【转】
  12. 小程序css 如何引用图片,微信小程序实例:如何引入外部js的文件(图文)
  13. 安卓音频开发(四)使用lame把wav转mp3
  14. 用C语言实现小写金额转大写
  15. 夏日汽车保养 雨季汽车保养
  16. 给众多IT行业开发者的一个建议,要注意避开黑心的培训机构
  17. matlab数学建模-神经网络感知器函数
  18. 怎么调整gif表情包的比例?
  19. 百慕大群岛失踪者再现之谜
  20. [IDA Plugin] IDA插件收集

热门文章

  1. 怎样将收藏的网址导入到搜狗账号中
  2. DDL和DML的含义
  3. 伦巴时间步的动作要领_伦巴前进步动作的基本要领
  4. 分布式数据库如何实现主键全局自增?
  5. 坚持是一种态度,公众号粉丝突破 1300 啦
  6. python 异步io 写excel_python异步IO编程(二)
  7. 人像分割之ExtremeC3Net
  8. 以空间换时间——动态规划算法及其应用:矩阵链相乘
  9. 逆转ISP,港科大陈启峰团队提出了可逆ISP
  10. linux系统安装flash