首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对同一行的并发更新

对同一行的并发更新
EN

Stack Overflow用户
提问于 2017-04-27 22:56:15
回答 1查看 2.1K关注 0票数 3

如果同时从不同的客户端发出以下两个查询,我将试图找出MySQL/InnoDB中应该发生的事情:

代码语言:javascript
复制
UPDATE tbl SET a=a+1 WHERE id=123;
UPDATE tbl SET b=b+1 WHERE id=123;

如果查询是在没有更早设置的显式事务或显式早期锁的情况下完成的,按照文档解释的方式,每个查询都将尝试获取一个next-key锁,因此实际上是更新行上的一个记录锁。

我是否理解得对,最糟糕的结果是一个查询等待锁,直到另一个查询完成?这里的冲突不可能有例外,对吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-27 23:36:50

你是对的。这两个更新操作将一个接一个地序列化。他们的顺序很难预测,所以你不应该尝试。

如果第三个查询或多或少地同时询问SELECT a, b FROM tbl WHERE id=123,则该查询将与其他查询一起序列化,这是不可预测的。因此,它可能发生在之前,之间,或在其他两个之后。

这两个更新查询最终都将完成。造成死锁所需的不仅仅是这些查询。

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

https://stackoverflow.com/questions/43669189

复制
相关文章

相似问题

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