首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排他锁(行级)- MySql需要一个例子

问排他锁(行级)- MySql需要一个例子
EN

Stack Overflow用户
提问于 2017-10-18 14:20:06
回答 1查看 2K关注 0票数 2

我想在MySQL (InnoDB)中锁定一个特定的行,这样特定的行就不能被另一个连接读取。

代码语言:javascript
复制
start transaction;
Select apples from fruit where apples = 'golden';
commit;

现在我想申请一个独占锁

独占锁一种防止任何其他事务锁定同一行的锁。

https://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-shared-exclusive-locks

我假设锁get已被应用,那么试图访问同一行的第二个连接必须等待第一个连接以"commit;“释放锁;

我的问题是,如何调整SQL语句以应用该锁?或者这是在开始事务中自动发生的吗?

我一直想找个好例子,但没有。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-19 02:10:26

代码语言:javascript
复制
START TRANSACTION;
Select apples 
  from fruit 
 where apples = 'golden'
   FOR UPDATE;
...
COMMIT;

SELECT ... FOR UPDATE语句首先锁定行,然后将其返回给您。

任何试图在同一时间对同一行执行相同操作的人都将等待您的COMMIT或ROLLBACK,然后他们将收到该行.你所做的任何改变。

如果您不打算更改行,您只想确保没有其他人可以更改,那么您可以SELECT ... LOCK IN SHARE MODE。

注意,无论哪种方法,从技术上讲,它不是被锁定的“行”,实际上是被锁定的索引记录,但是在InnoDB中,“一切都是索引”(即使没有索引的表实际上仍然有一个索引,由系统很好地创建),所以最终结果是相同的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46812431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档