MySQL update For_MySQL中select中的for update 的用法
注意: FOR UPDATE 只能用在事务区块(BEGIN/COMMIT)中才有效。
有时候我们会看到一些select语句后面紧跟一句for update,表示手动加锁的意思,这里我们就介绍一下对for update的理解。相对另一种手动加锁方法lock in share mode 的区别见:https://blog.csdn.net/liangzhonglin/article/details/65438777。
for update:IX锁(意向排它锁),即在符合条件的rows上都加了排它锁,其他session也就无法在这些记录上添加任何的S锁或X锁。如果不存在一致性非锁定读的话,那么其他session是无法读取和修改这些记录的,但是innodb有非锁定读(快照读并不需要加锁),for update之后并不会阻塞其他session的快照读取操作,除了select …lock in share mode和select … for update这种显示加锁的查询操作。
lock in share mode:是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)。
for update是一个意向排它锁,也就是说对于select … for update 这条语句所在的事务中可以进行任何操作(锁定的是记录,这里指主键id=1的这条记录),但其它事务中只能读取(对这条id=1的记录),不能进行update更新操作。
一般用在并发场景下,如双11的时候商品数量的更新,如果不添加for update的话,则会出现商品数量被多减的bug。
为了更加方便理解,我们举例说明(事务隔离级别为 RR,这里表tb的id为主键)
事务A:
start transaction;
select * from tb where id=1 for update;
update tb set product_num=product_num-1 where id=1;
此时另一个事务B执行同样的程序语句:
start transaction;
// 下面此时会被阻塞,直到事务A提交或者回滚
select * from tb where id=1 for update;
update tb set product_num=product_num-1 where id=1;
对于其它主键值非1的不存在这种情况,只要两个事务操作的不是同一条记录就可以执行成功。
MySQL update For_MySQL中select中的for update 的用法相关推荐
- 转-LR中select next row和update value on的设置
LR中select next row和update value on的设置 LR的参数的取值,和select next row和update value on的设置都有密不可分的关系.下表给出了sel ...
- 【转】MySQL中select * for update锁表的问题
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- mysql begin end 用法_数据库:Mysql中“select ... for update”排他锁分析
作者:志波同学来源:https://mp.weixin.qq.com/s/8uH-7TD9ZRG4NCya80mOHg Mysql InnoDB 排他锁 用法:select - for update; ...
- mysql update 排他锁_数据库:Mysql中“select ... for update”排他锁分析
Mysql InnoDB 排他锁 用法: select - for update; 例如:select * from goods where id = 1 for update; 排他锁的申请前提:没 ...
- 数据库:Mysql中“select ... for update”排他锁分析
Mysql InnoDB 排他锁 用法: select - for update; 例如:select * from goods where id = 1 for update; 排他锁的申请前提:没 ...
- MySQL update For_mysql SELECT FOR UPDATE语句使用示例
以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式: SELECT ... L ...
- 数据库中Select For update语句的解析
----------- Oracle -----------------– Oracle 的for update行锁 键字: oracle 的for update行锁 SELECT-FOR UPDAT ...
- MySQL中SELECT语句简单使用
MySQL中SELECT语句简单使用 最近开始复习mysql,查漏补缺吧. 关于mysql 1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名.表名.列名这些标识符默认是区分 ...
- mysql的where字句调优_mysql中select和where子句优化的总结
本篇文章给大家带来的内容是关于mysql中select和where子句优化的总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 数据库优化: 1.可以在单个SQL语句,整个应用程序, ...
最新文章
- 使用Spring框架实现远程服务暴露与调用
- Tableau如何连接其他电脑上的mysql数据库
- 面试 | MySQL InnoDB一棵B+树可以存放多少行数据?
- SQL Server 中如何判断表是否存在
- 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...
- UVC (USB Video Class) 使用笔记 (转)
- pyqt5 实现右键自定义_《快速掌握PyQt5》第十七章 事件处理
- C++ class实现顺序队列(完整代码)
- Python应用实战-Python提升运行速度技巧总结
- 北大青鸟c语言课后答案,北大青鸟C语言教程--第一章 C语言基础.ppt
- [转]由于项目原因看了一下vml,写了一个Web工作流的设计器雏形!
- python opencv中的imwrite函数_python – OpenCV imwrite函数导致’undefined symbol’
- C# string.Format json格式字符串报错”输入字符串的格式不正确“
- JavaSE进阶582-589 IO流(二)File类/目录拷贝
- html大作业网页代码 web网页设计实例作业 ——二手书店-大学生书店(13页) 学生个人网站作业模板 简单个人网页制作
- 山东省第七届ACM大赛E题题解
- html发短信模版,短信模板管理.html
- 如何为BLE 设备添加OTA DFU 空中升级服务(下)?
- MyCat相关知识及测试要点
- 引用 JAVA面试题集
热门文章
- linux命令zxvf
- OpenCV 4.x API 详解与C++实例-Mat数据类型详解
- 算法基础--优惠券问题(贪心算法)
- matlab中 点到线的距离,用matlab求解点到直线的距离
- c1TrueDBGrid 常用属性
- 一站式清理垃圾——MacBooster 7 Pro Mac可以做到!
- 忍者必须死3手游怎么玩?分享一下我玩忍者必须死3的实用心得
- php getenv无法获取环境变量
- python hook dll_Python——dll注入
- JPA 中使用 @OneToMany 、@ManyToOne 等关系映射注解