代码之家  ›  专栏  ›  技术社区  ›  Mariusz Jamro

如果嵌套事务成功提交,父事务是否可能失败?

  •  1
  • Mariusz Jamro  · 技术社区  · 6 年前

    我试图理解SQL Server中的嵌套事务。让我们考虑以下SQL命令链:

    BEGIN TRANSACTION; -- #1
    BEGIN TRANSACTION; -- #2
    UPDATE foo SET column = 'something'; -- Change something in one table.
    COMMIT TRANSACTION; -- #2
    

    如果提交事务2成功,是否有可能提交事务1失败?如果是,您能否提供一个可能发生这种情况的示例?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Lukasz Szozda    6 年前

    A SQL Server DBA myth a day: (26/30) nested transactions are real

    SELECT @@TRANCOUNT;
    BEGIN TRANSACTION; -- #1
    SELECT @@TRANCOUNT;
    BEGIN TRANSACTION; -- #2
    SELECT @@TRANCOUNT;
    UPDATE foo SET [column] = 'something';
    COMMIT TRANSACTION; -- #2
    SELECT @@TRANCOUNT;
    ROLLBACK;      -- simulate error or explicit rollback
                   -- update is lost
    

    DBFiddle Demo

    Commit transaction outside the current transaction (like autonomous transaction in Oracle)

    推荐文章