Mysql 行锁 for update
Mysql 只有Innodb支持行锁
使用行锁需要 事务支持
首先打开两个 mysql-client
分别执行
- client1
select * from my_entity1 for update;
- client2
select * from my_entity1 for update;
发现行锁无效,说明需要事务支持
- client1
start transaction;
select * from my_entity1 for update;
- client2
select * from my_entity1 for update;
这个时候 client2 阻塞等待锁
此时给client1 输入 commit; client2获得锁并且获取结果
如果client2 不加行锁也是不会被阻塞的
除此之外 forupdate还有其他方法
select * from t for update 会等待行锁释放之后,返回查询结果。
select * from t for update nowait 不等待行锁释放,提示锁冲突,不返回结果
select * from t for update wait 5 等待5秒,若行锁仍未释放,则提示锁冲突,不返回结果
select * from t for update skip locked 查询返回查询结果,但忽略有行锁的记录
Spring jpa 行锁
- 对调用的service 加 @Transaction注解
- 使用 @Query 原生sql注解
@Transactional
public void updateLockTester()
public interface Entity2Dao extends JpaRepository<MyEntity2, Long> {
List<MyEntity2> findAllByTagEquals(Integer tag);
@Query(value = "select * from my_entity2 where tag = :tag for update", nativeQuery = true)
List<MyEntity2> findAllByTag2Equals(@Param("tag") Integer tag);
}
不能太过于依赖行锁,更建议使用分布式锁提高效率
Mysql 行锁 for update的更多相关文章
- 关于mysql事务行锁for update实现写锁的功能
关于mysql事务行锁for update实现写锁的功能 读后感:用切面编程的理论来讲,数据库的锁对于业务来说是透明的.spring的事务管理代码,业务逻辑代码,表锁,应该是三个不同的设计层面. 在电 ...
- mysql行锁和表锁
mysql innodb支持行锁和表锁,但是MyIsam只支持表锁.现在我们说说mysql innodb的行锁和 有如下表id为主键 为了出现演示效果,我们将mysql的autocommit设置为0 ...
- 数据库进阶之路(五) - MySQL行锁深入研究
由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统:假设id=1的这本书库存为1,但是有2个人同时来借这本书,此处的逻辑为: ; --如果restnum大于0,执行u ...
- MySQL行锁深入研究
原文:http://blog.csdn.net/minipeach/article/details/5325161/ 做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图 ...
- mysql 行锁
在电子商务里,经常会出现库存数量少,购买的人又特别多,大并发情况下如何确保商品数量不会被多次购买. 其实很简单,利用事务+for update就可以解决. 我们都知道for update实际上是共享锁 ...
- MySQL 行锁 表锁机制
MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑.遇到了可别乱踩.通过本章内容,带你学习MySQL的行锁 ...
- 理解 mysql行锁和表锁
在调用存储过程中,就会涉及到表锁,行锁这一概念:所谓区别:有索引的时候就是行锁,没有索引的时候就是表索. innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的. 表锁演示(无索引) Ses ...
- mysql 行锁 表锁
MySQL数据库 - 引擎: - innodb - 支持事务 - 锁 - 行锁 - 表锁 - 示例: - 终端: begin; select xx from xx for update; commit ...
- mysql行锁、表锁。乐观锁,悲观锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
随机推荐
- phpcms发布文章自定义字段
phpcms发布文章自定义字段1 进入后台 模型管理 新建模型 里面可以自定义字段了
- 源码编译安装使用glusterfs+heketi安装使用
注:使用源码安装的原因主要是使用yum安装glusterfs服务端时出现一些依赖库问题 准备3台glusterfs服务器(官方也建议至少3台,防止发生脑裂),并在各个服务器的/etc/hosts下面添 ...
- pycharm社区办找不到View-->Tool Windows->DataBase的解决办法
File->Settings->Plugins->Database Navigator 安装
- maven 引入qrcode.jar
mvn install:install-file -Dfile=e:\QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 ...
- golang 学习笔记 -- 类型
int 和 uint的实际宽度会根据计算架构不同而不同,386下4个字节, amd64下8个字节 byte可看做uint8的别名类型 rune可看做int32的别名类型,专用于存储Unicode编码的 ...
- golang---命令源码文件与命令行参数
命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的. import "flag" flag包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个se ...
- Java异常的10个关键知识点
前言 总结了Java异常十个关键知识点,面试或者工作中都有用哦,加油. 一. 异常是什么 异常是指阻止当前方法或作用域继续执行的问题.比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异 ...
- jq 简单实现 table 显示和隐藏
在做table显示和隐藏的时候,需要用到节点的问题.不要用id.循环的时候id都是一样的. 这样一个简单的tr显示和隐藏就实现了.也可以将click 换成别的事件.
- SUSE12SP3-Samba配置
简介 samba官网:https://www.samba.org/ 维基百科: https://zh.wikipedia.org/wiki/Samba Samba,是种用来让UNIX系列的操作系统与微 ...
- soup.select的用法
1.通过标签选择 # 选择所有title标签 soup.select("title") # 选择所有p标签中的第三个标签 soup.select("p:nth-of-ty ...