1:悲观锁

1.1 特点:

  每次查询都会进行锁行,怕“其他人”进行数据的修改。

1.2 实现步骤:

  步骤1:开启事务test1,并对id=2的记录进行查询,并加锁,如:

  

   步骤2:在事务test1没有进行commit的情况下,开启事务test2,并对id=2的记录进行修改,看执行结果

  

     最终执行结果显示获取锁超时。 

     而在获取锁的过程中,执行 show processlist 命令可以看到:修改id=2的sql命令一直在等待锁。

     而由于事务test1我没有commit,因此事务test2是获取不到锁的,因此就超时了。

  

  步骤3:当我事务test1进行commit之后,我在事务test2中进行id=2的记录的修改操作时会是什么情况:

  

     最终可以看到在事务test1进行commit之后,事务test2的修改操作终于成功了。

1.3 总结:

    在事务中执行 select * from table where id = ? for update 并没有进行commit时,id = ? 的记录将进行锁行,另外一个事务想要修改 id = ?  的记录将会一直阻塞直至事务超时。

2:乐观锁

2.1 特点:

  1:适用于读多于写的情况。

  2:不会锁行,乐观主义。

2.2 实现方式:

  常见的就是增加version字段或时间戳字段,每次修改都进行这个字段的更新。

2.3 那么如何解决多个人同时进行修改/新增/删除等操作时,最终只有一个执行成功?

我这里采用version的方式进行演示,测试步骤如下:

2.3.1:事务1的 DDL

2.3.2:事务2的 DDL

2.3.3:流程图

  当事务1和事务2同时修改id=2 and version = 1 的记录的时候,最终事务1成功修改,而到事务2进行修改时符合条件的记录已经不存在了,因此修改失败!!

  流程图如下:

  结果:通过控制version,可以合理的解决资源竞争问题。

     在日常开发中,可以利用事务的一致性,做更多的判断及操作。

MYSQL 悲观锁和乐观锁简单介绍及实现的更多相关文章

  1. mysql行锁、表锁。乐观锁,悲观锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  2. Mysql锁机制--乐观锁 & 悲观锁

    Mysql 系列文章主页 =============== 从 这篇 文章中,我们知道 Mysql 并发事务会引起更新丢失问题,解决办法是锁.所以本文将对锁(乐观锁.悲观锁)进行分析. 第一部分 悲观锁 ...

  3. MySQL学习笔记(四)悲观锁与乐观锁

    恼骚 最近在搞并发的问题,订单的异步通知和主动查询会存在并发的问题,用到了Mysql数据库的 for update 锁 在TP5直接通过lock(true),用于数据库的锁机制 Db::name('p ...

  4. 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

  5. 关于MySql悲观锁与乐观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.本文将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍. 悲观锁(Pessimistic Lock) 悲观锁的 ...

  6. 【MySQL锁】MySQL悲观锁和乐观锁概念

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.本文将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍. 悲观锁(Pessimistic Lock) 悲观锁的 ...

  7. 第36讲 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

  8. mysql的锁--行锁,表锁,乐观锁,悲观锁

    一 引言--为什么mysql提供了锁 最近看到了mysql有行锁和表锁两个概念,越想越疑惑.为什么mysql要提供锁机制,而且这种机制不是一个摆设,还有很多人在用.在现代数据库里几乎有事务机制,aci ...

  9. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  10. mysql 悲观锁与乐观锁的理解

    悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段. 不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈. 一.悲观锁 顾名思义,就是对于数据的 ...

随机推荐

  1. ICMP&&PING

    ICMP 1.定位:互联网控制报文协议(Internet Control Message Protocol),是TCP/IP协议族的一个子协议,位于网络层.它被IP用于提供许多不同的服务.ICMP是一 ...

  2. NodeMCU学习笔记

    NodeMCU学习笔记 引脚连通 引脚 连通 D3 FLASH按键 D0 模组上的LED D4 芯片的LED FLASH按键 D3引脚已经与开发板上的FLASH按键开关连接 我们可以通过NodeMCU ...

  3. UI和3D物体的堆叠响应

    一.问题:当3D物体和UI元素重叠显示时一般UI元素会遮挡物体,这时点击UI元素响应时UI后方的物体也会响应. private void OnMouseDown() { ChangeColor(); ...

  4. MDK中用C++开发STM32

    ​作者:良知犹存 转载授权以及围观:欢迎添加微信:Allen-Iverson-me-LYN 前言     最近想开发一段单片机的代码,代码本身有很多的重复元素,这重复定义的一些结构体使用起来有些繁琐, ...

  5. 搜索Ex (洛谷提高历练地)

    搜索Ex P1120 小木棍 题意:不超过65根长度小于50的小木棍(是由一批等长木棍砍断得到的),求原始木棍的最小可能长度 分析:优化+减枝爆搜 搜索状态要记录当前尝试的已经填好的长度,当前尝试填的 ...

  6. Luogu P2408 不同子串个数【SAM】

    P2408 不同子串个数 计算一个字符串的不同子串个数 两种方法,一种是\(dp\)出来\(SAM\)从起点开始的路径数量 另一种方法就是计算每个点的\(len[i]-len[link[i]]\)这个 ...

  7. P2062 分队问题(DP)

    题目描述 给定n个选手,将他们分成若干只队伍.其中第i个选手要求自己所属的队伍的人数大等于a[i]人. 在满足所有选手的要求的前提下,最大化队伍的总数. 注:每个选手属于且仅属于一支队伍. 输入输出格 ...

  8. 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)

    题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...

  9. 避坑!js正确地使用fill()初始化二维数组

    先介绍一下坑 fill()方法都知道,填充数组 比如: let a = new Array(5).fill(0); console.log(a); // 输出结果为[0, 0, 0, 0, 0] 当我 ...

  10. Selenium+Python之下拉菜单的定位

    1.通过selenium.webdriver.support.ui的Select进行定位 下拉菜单如下图: 定位代码(选择Male): from selenium.webdriver.support. ...