问题我似乎是典型的,虽然我找不到一个好的解决方案。 我有一个表“Orders”,可以由两个独立的进程同时访问,以检查记录的状态并根据行的值更新它。 在继续执行Update查询之前,两个进程都会调用相同的查询: SELECT * FROM Orders WHERE id = 1 AND paid ='FALSE'LIMIT 1
两个进程都获取行并启动Update进程,通过首先在此表上启动Update来导致重复的更新过程: 更新订单SET paid ='TRUE'WHERE id = 1 LIMIT 1
如何在InnoDB中正确隔离事务,因此不会产生重复的过程,因此第二个进程无法执行任务? 我正在考虑SELECT FOR UPDATE,但如果第一个进程已经开始使用该行,我是否有如何执行常规SELECT * FROM Orders WHERE id = 1 AND paid ='FALSE'LIMIT 1并且如果它得到一行,然后执行相同的SELECT FOR UPDATE以锁定行/表?