首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查innoDB行上的事务是否正在发生?

检查innoDB行上的事务是否正在发生?
EN

Stack Overflow用户
提问于 2014-07-02 08:27:53
回答 1查看 71关注 0票数 2

如果一个数据库事务发生在一个线程上,是否有办法让其他线程在尝试该事务之前检查该事务是否已经发生?我知道innoDB有行级锁,但如果事务已经在另一个线程上发生,我希望不要尝试该事务,而不是等待锁被释放后再尝试它。

为了让我的问题更清晰,解释一下我试图做的事情可能会有所帮助:

我用php创建了一个简单的抽奖,用MySQL创建了一个innoDB表。当用户加载页面以查看抽奖时,它会检查抽奖的数据库行,以查看其预定的结束时间是否已过,以及其在数据库中的“已处理”列是否为true或false。

如果抽奖需要处理,它将开始一个数据库事务,该事务在被提交并在数据库中标记为“已处理”之前大约需要5秒。如果多个用户同时加载页面,我觉得它会多次处理抽奖,这不是我想要的。理想情况下,只有在没有其他线程在处理抽奖时,它才会尝试处理抽奖,否则它什么也不会做。

我该怎么做呢?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-07-02 08:35:55

您可以实现表级锁定,并处理任何后续连接,使其要么在队列中运行,要么静默失败:

https://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

从MySQL文档中:

代码语言:javascript
复制
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24521163

复制
相关文章

相似问题

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