Transaction

SQL 事務:我什麼時候回滾?

  • March 17, 2017

這可能是一個簡單的問題,但我想檢查回滾事務的機制。

據我了解,步驟如下:

  1. BEGIN TRANSACTION(或同等學歷)
  2. 一條或多條 SQL 語句
  3. COMMIT要麼ROLLBACK

據我所知,如果其中一條 SQL 語句失敗,例如無效INSERTUPDATE.

這表明上述過程(直到送出)可以在手動輸入的語句集合中。

但是,我在什麼階段做出回滾的決定?這是否表明ROLLBACK在程序中會發生更多的事情?換句話說,是否曾經手動回滾?

通過過程,我不一定指的是儲存過程。我想某些應用程序可能正在做同樣的事情。

我認為這個問題通常適用於任何 SQL 數據庫(當然,前提是它支持事務)。

換句話說,是否曾經手動回滾?

不,不是這樣,除非有人在做測試,否則我幾乎沒有看到人們手動進行回滾。回滾是在儲存過程或事務中指定的,您要麼希望在其中輸入完整更改,要麼根本不輸入任何內容。

據我所知,如果其中一條 SQL 語句失敗,例如無效的 INSERT 或 UPDATE,事務將自動回滾。

根據事務的啟動方式,如果它在顯式開始事務並送出是的,它將在查詢失敗後完全回滾到其初始狀態,而如果事務不在開始事務並送出,它將儲存所做的更改直到查詢失敗,並且在查詢失敗後,它將停止進行進一步的更改。

系統啟動回滾的典型情況是當死鎖發生時,SQL Server 通過內部機制選擇死鎖犧牲品,終止事務,它可能會或可能不會回滾,具體取決於它是顯式事務還是隱式事務。就像正常的選擇語句被殺死一樣,它們本身就沒有回滾

引用自:https://dba.stackexchange.com/questions/167422