首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的并发处理

MySQL中的并发处理
EN

Stack Overflow用户
提问于 2012-08-16 02:48:04
回答 2查看 219关注 0票数 2

当像这样更新字段时,它将锁定字段:

代码语言:javascript
复制
UPDATE table SET field = field + 1

由于这是计数器的一部分,预计会有一些负载,我担心当多个用户访问我的网站时,并不是所有的计数都会被注册。

有没有更好的方法或解决办法呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-16 02:56:11

您的解决方案:

代码语言:javascript
复制
 UPDATE table SET field = field + 1

绝对完美。这是一条SQL语句,它被完全执行,没有副作用或者根本没有副作用。另外,您可以做的就是检查您的语句是否已实际执行。如果没有,您可以重试执行它。但这并没有真正的原因。你可以让它保持原样...在大多数情况下,当正确编写的语句失败时,还有另一个原因(如过载的DB),重试会使情况变得更糟。

如果对表只有很短的写/读访问,那么一切都很好;如果并发命令需要访问它,它们将等待,直到锁被释放,然后它们将执行。

仅当您在同一个表上执行耗时超过1-2秒的操作时。然后,您可能会丢失一些计数。等待获取锁的超时时间通常是10 / 30秒。如果进程只是手动锁定表(例如,"LOCK table"),并且不释放它。这可能是个bug。其他SQL语句将无法获得锁,并最终将在一段较长的等待时间后中止。

票数 4
EN

Stack Overflow用户

发布于 2012-08-16 02:50:51

myisam引擎总是在执行事务之前锁定表,因此其他并发事务将被强制等待,直到这个事务完成

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

https://stackoverflow.com/questions/11975265

复制
相关文章

相似问题

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