博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL中select for update的问题
阅读量:6963 次
发布时间:2019-06-27

本文共 420 字,大约阅读时间需要 1 分钟。

hot3.png

由于InnoDB引擎预设的是Row-Level Lock,所以只有明确的主键,MySQL才会执行行锁.否则MySQL将会执行表锁.

 

实验如下:

1.当我们使用主键作为查询查询条件,并使用for update加锁的时候,我们只是对这条记录加锁:

终端1: id=1的记录已经被加锁,在事务提交之前,终端2无法读取到这条记录.

183808_DGZu_267473.jpg

终端2:现在无法读取id=2的记录,但是可以读取主键为其他值的记录. 

184101_Pi4n_267473.png

184604_Rmy5_267473.png

终端1的事务提交(commit)之后,终端2的事务才可以查询到id=1的记录 

184642_P6ua_267473.png

2.当我们不使用主键作为查询条件并for update,会触发表锁.

终端1:使用非主键作为关键字作为检索条件终端2:在事务提交之前,终端2无法以各种条件查询,因为终端1事务已经触发了表锁. 

184723_kiRg_267473.png

终端2:在事务提交之前,终端2无法以各种条件查询,因为终端1事务已经触发了表锁.

184805_K3Ei_267473.png

转载于:https://my.oschina.net/u/267473/blog/668472

你可能感兴趣的文章
使用计划任务定时重启Server
查看>>
RedisCluster工具类
查看>>
我的友情链接
查看>>
htpasswd用法(即配置SVN密码加密)
查看>>
Android Service完全解析,关于服务你所需知道的一切(上)
查看>>
日志打印中的入参
查看>>
Microsoft Dynamics CRM 2013 配置之 添加配置 域证书服务器 和 ADFS
查看>>
your windows password does not match your Notes password
查看>>
TCP: time wait bucket table overflow解决方法
查看>>
CSS样式中设置table的cellspacing属性
查看>>
The method getTextContent() is undefined for the type Node
查看>>
iPhone动画属性详解
查看>>
fatal error: 'openssl/err.h' file not found
查看>>
zabbix实现 SAS 6/iR 型号 Raid信息监控
查看>>
RHEL Centos7 Yum网络源与光盘源设置
查看>>
一条sql语句实现一维表生成二维表格
查看>>
我的友情链接
查看>>
从“赢”字诠释解读成功的必备要素(一)
查看>>
面试心得
查看>>
我的友情链接
查看>>