一.mysql 悲观锁实现条件

①.查询和修改必须在一个事务中

/*** 更新Inter数据*/
@Override
@Transactional
public void updateInterData() {InterBean interBean = interMapper.queryInterData("interface1");Long interUrl = interBean.getInterUrl();interUrl+=1;interBean.setInterUrl(interUrl);interMapper.updateInterData(interBean);
}

②. 查询语句末尾需要加for update

<select id="queryInterData" resultMap="baseResult">select id,inter_number,inter_url from interface.lock_test_table where inter_number =#{interNumber} for update
</select>

③.条件字段必须有索引(这个我不加索引也能实现,后面证明)

二.开始调用验证

@RequestMapping("/update")
public String updateInterData(){for (int i = 0; i < 5; i++) {threadPool.submit(()->{lockService.updateInterData();});}return "OK";
}

使用线程池在controller 调用模拟高并发

测试场景1

①查询和修改在同一个事务下面

②for update

③查询条件字段加索引

测试结果:

调用前

调用后

可以看到在5个线程并发下修改数据由1每次加1现在是6了

测试场景2(将事务去掉其他条件保持不变)

测试结果:

调用前

调用后

锁没有生效,5个线程只加了1个值

场景3 (去掉for update,其他条件不变)

调用前:

调用后:

5个线程只加了1个值

场景3(去掉查询字段的索引,其他条件保持不变)

测试前:

测试后:

可以看到在5个线程并发下修改数据由1每次加1现在是6了(查询字段有无索引对锁没有影响,但是会让行锁变表锁,这个我后面写)

我的第一个博客,千里之行,始于足下.

mysql 悲观锁实现相关推荐

  1. mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)

    MySQL悲观锁 select for update实现秒杀案例(jfinal框架) 发布时间:2018-08-17作者:laosun阅读(4287) 为了方便测试,博主使用最新的jfinal框架,里 ...

  2. 使用mysql悲观锁解决并发问题

    使用mysql悲观锁解决并发问题 参考文章: (1)使用mysql悲观锁解决并发问题 (2)https://www.cnblogs.com/laoyeye/p/8228467.html 备忘一下.

  3. 【三大锁】悲观锁——mysql悲观锁

    一 三大常用锁 悲观锁 你准备去银行取10w了,跟银行提前打个招呼,有个10w现金谁都别动.(一般只限制写-别人不能取那10w但是能查到银行总体余额,某些场景会限制读) 乐观锁 你准备取10w了,不打 ...

  4. mysql悲观锁的应用_mysql悲观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个很是基础的概念.mysql 悲观锁(Pessimistic Lock) 悲观锁的特色是先获取锁,再进行业务操做,即"悲观&qu ...

  5. mysql悲观锁会有脏数据吗_mysql悲观锁原理详解

    mysql中的锁概念 mysql已经成为大家日常数据存储的最常用平台,但随着业务量和访问量的上涨,会出现并发访问等场景,如果处理不好并发问题的话会带来严重困扰.下面介绍一下如何通过mysql的悲观锁来 ...

  6. mysql悲观锁优化_MySQL数据库优化(三)—MySQL悲观锁和乐观锁(并发控制)

    一.悲观锁 1.排它锁,当事务在操作数据时把这部分数据进行锁定,直到操作完毕后再解锁,其他事务操作才可操作该部分数据.这将防止其他进程读取或修改表中的数据. 2.实现:大多数情况下依靠数据库的锁机制实 ...

  7. mysql 悲观锁和乐观锁区别

    1.mysql悲观锁:在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,依靠数据库提供的锁机制,每次会申请锁并加锁和解锁操作 第一步:两个终端均关闭自动提交 左边: 右边: 第二步:左边利用 s ...

  8. mysql悲观锁和乐观区别_MySQL悲观锁和乐观锁的区别是什么

    MySQL悲观锁和乐观锁的区别是什么 区别如下: 1.概念不同 乐观锁( Optimistic Locking): 顾名思义,对加锁持有一种乐观的态度,即先进行业务操作,不到最后一步不进行加锁,&qu ...

  9. Mysql悲观锁以及乐观锁案例说明

    悲观锁介绍: 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依靠数据库 ...

最新文章

  1. Linux静态/动态链接库的创建和使用
  2. 苹果 的硬件架构和普通PC有区别吗? 有什么区别?
  3. pg 10 wal 归档同步配置
  4. 【struts2】struts2实现自定义数据类型转换器
  5. unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...
  6. SON Web Token设计单点登录系统
  7. restful web_RESTful Web服务可发现性,第4部分
  8. WinCE6.0 R3 安装记
  9. Mysql插入中文的字段内容时乱码的解决方法
  10. iOS NSMutableURLRequest 上传图片
  11. paip.c++ qt __gxx_personality_sj0 __gxx_personality_v0问题的解决
  12. 【爬虫】花瓣采集下载器
  13. RequestError Error connect ETIMEDOUT 59.24.3.174443
  14. SF18 | MACD顶底背离+动态区间交易模型源码(技术贴)
  15. WIN7截图工具灵活使用
  16. javascript基础学习 1
  17. 基因数据处理98之SparkBWA运行时spark on Yarn问题日志完整记录
  18. RTP/RTCP协议解析
  19. 用Python数据处理分析入门必备系列文章:环境安装
  20. 国产超低功耗华大单片启动文件详解及SystemInit函数分析

热门文章

  1. linux下pip升级
  2. 一本书,一个软件思想和创意的T台大道
  3. Python中range函数的用法
  4. HAL库和标准库的区别
  5. myeclipse崩溃闪退解决方案
  6. 为什么我选择并且推崇用ROS开发机器人
  7. Subsurface Scatting 的简单模拟
  8. Python matplotlib 论文画图之常用操作
  9. Centos7中查看IP命令
  10. JavaScript设计模式 -发布订阅者模式