博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL中select * for update锁表的范围
阅读量:7237 次
发布时间:2019-06-29

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

MySQL中select * for update锁表的问题

由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table

Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。

例1: (明确指定主键,并且有此笔资料,row lock)

SELECT * FROM products WHERE id='3' FOR UPDATE;

SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;

例2: (明确指定主键,若查无此笔资料,无lock)

SELECT * FROM products WHERE id='-1' FOR UPDATE;

例2: (无主键,table lock)

SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

例3: (主键不明确,table lock)

SELECT * FROM products WHERE id<>'3' FOR UPDATE;

例4: (主键不明确,table lock)

SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;

注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。

注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。

在MySql 5.0中测试确实是这样的

另外:Myisam 只支持表级锁,InnerDB支持行级锁 添加了(行级锁/表级锁)锁的数据不能被其它事务再锁定,也不被其它事务修改

(修改、删除) 。是表级锁时,不管是否查询到记录,都会锁定表。

转载地址:http://cklfm.baihongyu.com/

你可能感兴趣的文章
为什么LinkedIn放弃MySQL slowlog,转用基于网络层的慢查询分析器?
查看>>
OPPO R11继续升温,8月8日将推出巴萨定制机
查看>>
从主流厂商宣传语看中国CRM领域的发展
查看>>
腾讯动漫回应停止支付作者稿酬传闻:均会按时如数支付
查看>>
因无力偿还网贷 内蒙古一对夫妻贩卖亲生龙凤胎
查看>>
张近东智慧零售大开发加码:2019年开店15000家
查看>>
西班牙一亚洲女子疑似被人从三楼推落 伤势严重
查看>>
学习Python编程语言-这28本有关Python书籍值得去了解
查看>>
刚刚,蚂蚁区块链喜提“世界互联网领先科技成果”
查看>>
后端工程师入门前端页面重构(一):口诀
查看>>
广州三本找Java实习经历
查看>>
初识 weex 系列(前端视角) - 基础完结
查看>>
《Web 推送通知》系列翻译 | 第七篇:推送事件 && 第八篇:显示一个通知
查看>>
你不知道的 Electron (一):神奇的 remote 模块
查看>>
华为资深架构师:Cloud Native架构一致性问题及解决方案
查看>>
AI还有什么不会的?机器人写稿技术应用
查看>>
iOS 中的 block 是如何持有对象的
查看>>
从业务变迁到研发犯难,微服务在Spring Cloud的实践之路
查看>>
Python 连接 MySQL 的几种姿势
查看>>
跨页面通信的各种姿势
查看>>