Transaction
SQL 事務:我什麼時候回滾?
這可能是一個簡單的問題,但我想檢查回滾事務的機制。
據我了解,步驟如下:
BEGIN TRANSACTION
(或同等學歷)- 一條或多條 SQL 語句
COMMIT
要麼ROLLBACK
據我所知,如果其中一條 SQL 語句失敗,例如無效
INSERT
或UPDATE
.這表明上述過程(直到送出)可以在手動輸入的語句集合中。
但是,我在什麼階段做出回滾的決定?這是否表明
ROLLBACK
在程序中會發生更多的事情?換句話說,是否曾經手動回滾?通過過程,我不一定指的是儲存過程。我想某些應用程序可能正在做同樣的事情。
我認為這個問題通常適用於任何 SQL 數據庫(當然,前提是它支持事務)。
換句話說,是否曾經手動回滾?
不,不是這樣,除非有人在做測試,否則我幾乎沒有看到人們手動進行回滾。回滾是在儲存過程或事務中指定的,您要麼希望在其中輸入完整更改,要麼根本不輸入任何內容。
據我所知,如果其中一條 SQL 語句失敗,例如無效的 INSERT 或 UPDATE,事務將自動回滾。
根據事務的啟動方式,如果它在顯式開始事務並送出是的,它將在查詢失敗後完全回滾到其初始狀態,而如果事務不在開始事務並送出,它將儲存所做的更改直到查詢失敗,並且在查詢失敗後,它將停止進行進一步的更改。
系統啟動回滾的典型情況是當死鎖發生時,SQL Server 通過內部機制選擇死鎖犧牲品,終止事務,它可能會或可能不會回滾,具體取決於它是顯式事務還是隱式事務。就像正常的選擇語句被殺死一樣,它們本身就沒有回滾。