两个事务操作:

set autocommit=off;

A:

begin;

select * from students where id=1 for update;

B:

begin;

select * from students where id=1;

显示结果(直接查询,无需获得锁)

select * from students;  

显示结果

select * from students where id=2 for update ;

显示结果

select * from students where id=1 for update;

等待(事务A提交后才会获得该行行锁)


案例:

转账操作中需要判断余额是否足够

begin;

select balance from account where id=1;  ①

(对余额进行判断,余额不做的不更新操作)

update account set balance=balance-100 where id=1; ②

update account set balance=balance+100 where id=2;

commit;

多线程下,会有多个事务并发访问数据库。

假设余额150,事务a可以执行到①判断余额充足,切换线程执行事务b到①并判断余额充足,最后都提交后,id为1的账户余额为-50;所以必须让整个事务操作保持原子性。

修改①为:select balance from account where id=1 for update;对该记录加行锁。当事务a执行完提交释放行锁时事务b才能获得行锁 再查询判断。

转载于:https://www.cnblogs.com/mryangbo/p/10805121.html

显式锁select for update 用法相关推荐

  1. java 内置锁_深入理解java内置锁(synchronized)和显式锁(ReentrantLock)

    synchronized 和 Reentrantlock 多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两种同 ...

  2. 显式锁Lock的集大成之作,最细节教程

    显式锁是什么? 我们一般喊synchronized就叫synchronized.其实synchronized又被称为隐式锁,但我们就爱喊它synchronized.而显式锁就是我们一般说的Lock锁, ...

  3. JAVA显式锁,各种锁分类

    显示锁优势 使用Java内置锁时,不需要通过Java代码显式地对同步对象的监视器进行抢占和释放,这些工作由JVM底层完成,而且任何一个Java对象都能作为一个内置锁使用,所以Java的对象锁使用起来非 ...

  4. Java并发编程之显式锁(Lock)使用

    又是一个基于AQS好用的类,看来下次有必要看看AQS了,正好又是放假. 既然叫显式锁,必然也有隐式锁,也就是所谓的synchronzied关键字,它们两者的区别呢在于使用范围,synchronzied ...

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

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

  6. Java多线程---线程通信(wait,notifyAll,生产者消费者经典范式,owner wait set,自定义显式锁BooleanLock)

    转自:https://blog.csdn.net/qq_35995514/article/details/91128585 1 学习内容 notifyAll 生产者.消费者经典范式 线程休息室 wai ...

  7. 显式锁(二)Lock接口与显示锁介绍

    一.显式锁简介    显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制.显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一 ...

  8. java多线程中 锁 的概念的理解,java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)...

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  9. java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)

    Lock接口 package concurency.chapter9; import java.util.Collection; public interface Lock { static clas ...

最新文章

  1. 第三十四篇:在SOUI中使用异步通知
  2. VIA笔试收集与解答
  3. stm32-串口接受不定长数据方法(3种)
  4. 如何保证消息消费顺序呢?
  5. 2019蓝桥杯省赛---java---C---6(旋转)
  6. 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...
  7. Hystrix面试 - 深入 Hystrix 断路器执行原理
  8. [BZOJ2036]聪明的阿卑多
  9. 有关malloc的一个小点
  10. 数据传输优化篇之:scp 或 rsync+ssh 参数优化
  11. string转换函数以及hnu暑期实训部分和A+B的例题
  12. 同时安装Python2,Python3如何解决冲突问题【官方解法】
  13. 电大网络教育计算机应用基础,(热)最新电大奥鹏远程网络教育计算机应用基础题库.doc...
  14. 扫描文件怎么设置到服务器,如何为扫描仪添加局域网功能
  15. C# CAD批量转换为图片
  16. 在 isilon 中使用 ldap 登录 ftp 服务
  17. android绘制半圆弧线_半圆形进度条Android - 绘制半圆
  18. 如何使用手机把照片压缩到100K?教你手机压缩方法
  19. 魔性的数字人形时钟动态pc端电脑屏幕保护
  20. 基础知识 | es6的知识点

热门文章

  1. 使用google colab运行RNN网络代码报告错误ValueError: Object arrays cannot be loaded when allow_pickle=False
  2. 百度浏览器支持html5,百度手机浏览器完美驾驭HTML5
  3. Android 热修复 HotFix 混淆apk生成patch包方案
  4. JZOJ 1016. 【PKU3321】苹果树
  5. java做的模板商城_不吹不黑4个超火Java开源项目,接私活、练手、必备项目
  6. 对大量转载贴识别算法的研究
  7. hust1342(流量有上下界的最小流)
  8. Magic Squares 魔板 (BFS+HASH)
  9. JZOJ__Day 2:【普及模拟】串
  10. Codeforces 1286C/1287E Madhouse (交互题)