您有以下两列一个InnoDB表答:ID(PK),状态MySQL的InnoDB的并发更新
两个线程访问以下顺序表:
Thread 1: SELECT id from A where status = 0 LIMIT 1;
Thread 2: SELECT id from A where status = 0 LIMIT 1;
两个线程选择ID 1.
Thread 1: UPDATE A SET status = 1 WHERE id = 1 AND status = 0;
Thread 2: UPDATE A SET status = 2 WHERE id = 1 AND status = 0;
是否有可能两个线程更新同一行?
现在增加交易:
Thread 1: SELECT id from A where status = 0 LIMIT 1;
Thread 2: SELECT id from A where status = 0 LIMIT 1;
Thread 1: START TRANSACTION;
Thread 2: START TRANSACTION;
Thread 1: UPDATE A SET status = 1 WHERE id = 1 AND status = 0;
Thread 2: UPDATE A SET status = 2 WHERE id = 1 AND status = 0;
Thread 1: COMMIT;
Thread 2: COMMIT;
是现在可能两个线程将更新行?
在任何一种情况下,如果两行都可以更新,那么解决这个问题的正确方法是什么?
可能重复[如何处理数据库中的并发更新?](http://stackoverflow.com/questions/1195858/how-to-deal-with-concurrent-updates-in-databases) –