代码之家  ›  专栏  ›  技术社区  ›  nickf

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

  •  6
  • nickf  · 技术社区  · 14 年前

    考虑这种情况:

    1. 获取第一个insert id(假设 153 )
    2. 更新该表中的所有记录,其中 id >= 153

    第四步安全吗?

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

    2 回复  |  直到 14 年前
        1
  •  8
  •   Quassnoi    14 年前

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

    是的,会的。

    记录 21 40 将被事务锁定 2 .

    1 将被阻止并等待事务 2 提交或回滚。

    2 提交,然后事务 1 将更新 40 2 )

        2
  •  0
  •   Cristik    11 年前

    我不认为这可以归类为一个种族条件,而是作为一个DMBS的具体行为。基本上,如果DBMS锁定新插入的记录,那么在提交第二个事务之前,第一个事务将看不到第二个事务的记录。

    当然还有锁定表的问题,如果第一个事务写入锁定表,那么第二个事务将在写入时被阻止,直到第一个事务完成。但不确定标准mysql是否提供这种功能。我知道它是MSSQL服务器。