共享锁(lock in share mode)

简介

允许不同事务之前共享加锁读取,但不允许其它事务修改或者加入排他锁

如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁

共享锁事务之间的读取

session1:

start transaction;

select * from test where id = 1 lock in share mode;

session2:

start transaction;

select * from test where id = 1 lock in share mode;

此时session1和session2都可以正常获取结果,那么再加入session3 排他锁读取尝试

session3:

start transaction;

select * from test where id = 1 for update;

在session3中则无法获取数据,直到超时或其它事物commit

Lock wait timeout exceeded; try restarting transaction

共享锁之间的更新

当session1执行了修改语句:

session1:

update test set name = 'kkkk' where id = 1;

可以很多获取执行结果。

当session2再次执行修改id=1的语句时:

session2:

update test set name = 'zzz' where id = 1;

就会出现死锁或者锁超时,错误如下:

Deadlock found when trying to get lock; try restarting transaction

或者:

Lock wait timeout exceeded; try restarting transaction

必须等到session1完成commit动作后,session2才会正常执行,如果此时多个session并发执行,可想而知出现死锁的几率将会大增。

session3则更不可能

结论:

mysql共享锁(lock in share mode)

允许其它事务也增加共享锁读取

不允许其它事物增加排他锁(for update)

当事务同时增加共享锁时候,事务的更新必须等待先执行的事务commit后才行,如果同时并发太大可能很容易造成死锁

共享锁,事务都加,都能读。修改是惟一的,必须等待前一个事务commit,才可

排他锁(for update)

简介

当一个事物加入排他锁后,不允许其他事务加共享锁或者排它锁读取,更加不允许其他事务修改加锁的行。

排他锁不同事务之间的读取

同样以不同的session来举例

session1:

start transaction;

select * from test where id = 1 for update;

session2:

start transaction;

select * from test where id = 1 for update;

当session1执行完成后,再次执行session2,此时session2也会卡住,无法立刻获取查询的数据。直到出现超时

Lock wait timeout exceeded; try restarting transaction

或session1 commit才会执行

那么再使用session3 加入共享锁尝试

select * from test where id = 1 lock in share mode;

结果也是如此,和session2一样,超时或等待session1 commit

Lock wait timeout exceeded; try restarting transaction

排他锁事务之间的修改

当在session1中执行update语句:

update test set name = 123 where id = 1;

可以正常获取结果

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

此时在session2中执行修改

update test set name = 's2' where id = 1;

则会卡住直接超时或session1 commit,才会正常吐出结果

session3也很明显和session2一样的结果,这里就不多赘述

总结

事务之间不允许其它排他锁或共享锁读取,修改更不可能

一次只能有一个排他锁执行commit之后,其它事务才可执行

不允许其它事务增加共享或排他锁读取。修改是惟一的,必须等待前一个事务commit,才可

mysql update 排他锁_Mysql 共享锁(lock in share mode),排他锁(for update)相关推荐

  1. Mysql 共享锁(lock in share mode),排他锁(for update)

    共享锁(lock in share mode) 简介 允许不同事务之前共享加锁读取,但不允许其它事务修改或者加入排他锁 如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁 共享锁事务之间的读 ...

  2. mysql普通查询排他锁_MySql 共享锁 排他锁

    行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突,行级锁分为共享锁和排他锁两种. 共享锁(Share Lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取 ...

  3. mysql share mode_mysql锁:mysql lock in share mode 和 select for update

    select ... lock in share mode select ... for update 注意点: 1.都在事务内起作用; 2.所涉及的是行锁(即innodb引擎); 3.保证当前ses ...

  4. mysql select lock in share mode_深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE

    概念和区别 SELECT ... LOCK IN SHARE MODE走的是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS ...

  5. mysql排他锁_mysql共享锁与排他锁

    mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能 ...

  6. mysql mdl 锁_MySQL源码学习:MDL字典锁

    什么是MDL MDL,Meta Data lock,元数据锁,一般称为字典锁.字典锁与数据锁相对应.字典锁是为了保护数据对象被改变,一般是一些DDL会对字典对象改变,如两个TX,TX1先查询表,然后T ...

  7. MySQL之事务 索引 锁_MySql 知识点之事务、索引、锁原理与用法解析

    本文实例讲述了MySql 知识点之事务.索引.锁原理与用法.分享给大家供大家参考,具体如下: 事务 事务概念 事务就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎执行一组操作语句, ...

  8. mysql 唯一索引 死锁_MySQL 死锁套路:唯一索引 S 锁与 X 锁的爱恨情仇

    毫不夸张的说,有一半以上的死锁问题由唯一索引贡献,后面介绍的很多死锁的问题都跟唯一索引有关.这次我们讲一段唯一索引 S 锁与 X 锁的爱恨情仇 我们来看一个简化过的例子 # 构造数据 CREATE T ...

  9. mysql罏在十三_MySQL高级知识(十三)——表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

最新文章

  1. QS世界大学最新排名公布:清华超过耶鲁,MIT仍居榜首,12所中国高校跻身百强...
  2. 跨链(8)Cosmos之“跨链交互协议IBC”
  3. mysql用in报错_Mysql子查询IN中使用LIMIT
  4. UE4学习-新建C++组件、编码遇到问题
  5. 关于Spring的事务Transactional,锁同步,并发线程
  6. C语言学习笔记(五):《C语言深度剖析》笔记
  7. Vue中this.$router.replace和this.$router.push的区别
  8. [转] TextField的restrict属性妙用
  9. 菊子曰获取模板的草稿{29C28FD771BA4B0D8693}
  10. 算法:Reverse Words in a String(翻转字符串里的单词)
  11. 手机邮箱服务器设置安全类型,手机邮箱设置
  12. 加速开发效率,最低1元起拍,来戴尔官网领走你的高效编程神器Optiplex 5070!
  13. 计算机软件考试成绩查询时间,2020年计算机软考什么时候出成绩,怎么查成绩?|...
  14. 2011年新的个人纳税情况
  15. Vue 使用XLSX导出excel,并且设置标题背景颜色、字体、居中。并且在前端导出成excel文件
  16. 足球大数据预测中欧亚大小球随时间变化的处理
  17. 图扑数字孪生智慧社区,助力社区数字化转型
  18. 视频剪辑需要专门报班去学吗?
  19. 基础练习16-分解质因数
  20. 自己动手画CPU之汉字字库存储芯片扩展实验

热门文章

  1. js中的对象转数组,数组转对象
  2. Win11本地连接怎么没有了?Win11网络连接不见了解决方法
  3. Xshell 数字小键盘输入无效?
  4. 牛客网暑期ACM多校训练营(第一场) J (莫队算法)
  5. 惠而浦空调遥控协议分析及使用Arduino遥控空调
  6. Visual Studio 2019下载、安装全教程、及使用简单窗体应用程序
  7. 关于软考的相关问题的总结
  8. Linux 安装ssh软件
  9. 尼尔机械纪元房顶机器人_《尼尔机械纪元》特殊任务及NPC位置一览
  10. 用python编写程序来检查序列时否是回文序列【例如1234321就是回文序列】