首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql select sql中的竞态条件

mysql select sql中的竞态条件
EN

Stack Overflow用户
提问于 2012-12-21 05:05:38
回答 1查看 1.5K关注 0票数 2

我试图完成的事情看起来很简单,

数据库类型: MyISAM

表结构: card_id,status

查询:从表中选择一个未使用的card_id,并将该行设置为已使用。

当两个查询同时运行时,在状态更新之前,相同的card_id会被获取两次,这是竞争条件吗?

我已经搜索过了。看起来Lock table是一个解决方案,但它对我来说太过分了,需要Lock特权。

有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-12-21 23:50:40

在我发布了这个问题之后,我想到了一个解决方案,这个方案和你在最后提到的完全一样。我使用了update语句,它是"update TABLE set status =' used‘where status = 'unused’limit 1",它返回表的主Id,然后我可以使用这个主ID来获取cart_id。说有两个update语句同时发生,正如您所说的,"MySQL将在整个表上获得一个锁,因此在那里的两个会话之间不存在“竞争”条件“,所以这应该解决了我的问题。但是我不确定你为什么说,"MySQL不提供样式声明支持“。

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

https://stackoverflow.com/questions/13980443

复制
相关文章

相似问题

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