相关疑难解决方法(0)

如何避免MySQL中的竞争条件

我正在开发的应用程序中存在潜在的竞争状况,我想在查询中考虑和避免这种情况。

总结应用程序流程...

  1. entries表中创建一个新行:

    INSERT INTO entries ( name, email ) VALUES ( 'Foo Bar', 'foo@example.com' );

  2. 通过查看对时间敏感的prizes表格,找出Bar先生是否是获胜者:

    SELECT id FROM prizes WHERE various_time_conditions = 'met' AND id NOT IN ( SELECT prize_id FROM entries );

  3. 如果他是赢家,请相应地更新他的条目行:

    UPDATE entries SET prize_id = [prize id] WHERE id = [entry id];

由于每个奖项只能颁发一次,因此我需要消除比赛条件的任何可能性,在这种情况下,另一个过程可以查询奖项表并更新上述步骤2和3之间的条目表。

我一直在做一些研究,发现了大量有关事务的信息(我所有的表都使用InnoDB)以及使用MySQL的SELECT ... FOR UPDATE语法,但是我对哪一个最适合我的解决方案感到困惑。

mysql sql transactions race-condition

3
推荐指数
1
解决办法
3140
查看次数

标签 统计

mysql ×1

race-condition ×1

sql ×1

transactions ×1