事务是否会阻止MySQL中的所有竞争条件问题?

nic*_*ckf 7 mysql transactions race-condition

考虑这种情况:

  1. 开始交易
  2. 使用auto_increment键将20条记录插入表中
  3. 获取第一个插入ID(让我们说它是153)
  4. 更新该表中的所有记录 id >= 153
  5. 承诺

第4步安全吗?

也就是说,如果另一个请求几乎准确地同时进入,并在上面的步骤2之后插入另外20个记录,但在步骤4之前,是否会出现竞争条件?

Qua*_*noi 7

也就是说,如果另一个请求几乎准确地同时进入,并在上面的步骤2之后插入另外20个记录,但在步骤4之前,是否会出现竞争条件?

是的,它会的.

记录2140将交易锁定2.

交易1将被阻止并等待交易2提交或回滚.

如果事务2提交,则事务1将更新40记录(包括通过事务插入的记录2)

  • 你能澄清一下吗?你是说有问题吗? (2认同)