显式锁select for update 用法
两个事务操作:
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 用法相关推荐
- java 内置锁_深入理解java内置锁(synchronized)和显式锁(ReentrantLock)
synchronized 和 Reentrantlock 多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两种同 ...
- 显式锁Lock的集大成之作,最细节教程
显式锁是什么? 我们一般喊synchronized就叫synchronized.其实synchronized又被称为隐式锁,但我们就爱喊它synchronized.而显式锁就是我们一般说的Lock锁, ...
- JAVA显式锁,各种锁分类
显示锁优势 使用Java内置锁时,不需要通过Java代码显式地对同步对象的监视器进行抢占和释放,这些工作由JVM底层完成,而且任何一个Java对象都能作为一个内置锁使用,所以Java的对象锁使用起来非 ...
- Java并发编程之显式锁(Lock)使用
又是一个基于AQS好用的类,看来下次有必要看看AQS了,正好又是放假. 既然叫显式锁,必然也有隐式锁,也就是所谓的synchronzied关键字,它们两者的区别呢在于使用范围,synchronzied ...
- mysql悲观锁关键字_MySQL悲观锁 select for update实现秒杀案例(jfinal框架)
MySQL悲观锁 select for update实现秒杀案例(jfinal框架) 发布时间:2018-08-17作者:laosun阅读(4287) 为了方便测试,博主使用最新的jfinal框架,里 ...
- Java多线程---线程通信(wait,notifyAll,生产者消费者经典范式,owner wait set,自定义显式锁BooleanLock)
转自:https://blog.csdn.net/qq_35995514/article/details/91128585 1 学习内容 notifyAll 生产者.消费者经典范式 线程休息室 wai ...
- 显式锁(二)Lock接口与显示锁介绍
一.显式锁简介 显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制.显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一 ...
- java多线程中 锁 的概念的理解,java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)...
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- java 显示锁_Java 实现一个自己的显式锁Lock(有超时功能)
Lock接口 package concurency.chapter9; import java.util.Collection; public interface Lock { static clas ...
最新文章
- 第三十四篇:在SOUI中使用异步通知
- VIA笔试收集与解答
- stm32-串口接受不定长数据方法(3种)
- 如何保证消息消费顺序呢?
- 2019蓝桥杯省赛---java---C---6(旋转)
- 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...
- Hystrix面试 - 深入 Hystrix 断路器执行原理
- [BZOJ2036]聪明的阿卑多
- 有关malloc的一个小点
- 数据传输优化篇之:scp 或 rsync+ssh 参数优化
- string转换函数以及hnu暑期实训部分和A+B的例题
- 同时安装Python2,Python3如何解决冲突问题【官方解法】
- 电大网络教育计算机应用基础,(热)最新电大奥鹏远程网络教育计算机应用基础题库.doc...
- 扫描文件怎么设置到服务器,如何为扫描仪添加局域网功能
- C# CAD批量转换为图片
- 在 isilon 中使用 ldap 登录 ftp 服务
- android绘制半圆弧线_半圆形进度条Android - 绘制半圆
- 如何使用手机把照片压缩到100K?教你手机压缩方法
- 魔性的数字人形时钟动态pc端电脑屏幕保护
- 基础知识 | es6的知识点
热门文章
- 使用google colab运行RNN网络代码报告错误ValueError: Object arrays cannot be loaded when allow_pickle=False
- 百度浏览器支持html5,百度手机浏览器完美驾驭HTML5
- Android 热修复 HotFix 混淆apk生成patch包方案
- JZOJ 1016. 【PKU3321】苹果树
- java做的模板商城_不吹不黑4个超火Java开源项目,接私活、练手、必备项目
- 对大量转载贴识别算法的研究
- hust1342(流量有上下界的最小流)
- Magic Squares 魔板 (BFS+HASH)
- JZOJ__Day 2:【普及模拟】串
- Codeforces 1286C/1287E Madhouse (交互题)