使用事務安全地更改資料

無論何時更改資料,都可以在資料操作語言(DML)命令中將更改包裝在事務中。DML 包括 UPDATETRUNCATEINSERTDELETE。你可以確保更改正確資料的方法之一是使用事務。

DML 更改將鎖定受影響的行。當你開始事務時,你必須結束事務,否則 DML 中所有正在更改的物件將由開始事務的人保持鎖定狀態。你可以使用 ROLLBACKCOMMIT 結束事務。ROLLBACK 將事務中的所有內容返回到其原始狀態。COMMIT 將資料置於最終狀態,在沒有其他 DML 語句的情況下,你無法撤消更改。

例:

--Create a test table

USE [your database]
GO
CREATE TABLE test_transaction (column_1 varchar(10))
GO

INSERT INTO 
 dbo.test_transaction
        ( column_1 )
VALUES
        ( 'a' )

BEGIN TRANSACTION --This is the beginning of your transaction

UPDATE dbo.test_transaction
SET column_1 = 'B'
OUTPUT INSERTED.*
WHERE column_1 = 'A'
  

ROLLBACK TRANSACTION  --Rollback will undo your changes
           --Alternatively, use COMMIT to save your results

SELECT * FROM dbo.test_transaction   --View the table after your changes have been run

DROP TABLE dbo.test_transaction

筆記:

  • 這是一個簡化的示例,不包括錯誤處理。但任何資料庫操作都可能失敗,因此丟擲異常。 下面是一個示例, 說明這種必需的錯誤處理方式。不應該在沒有錯誤處理程式的情況下使用事務,否則可能會使事務處於未知狀態。
  • 根據 隔離級別 ,事務會對要查詢或更改的資料進行鎖定。你需要確保事務長時間不執行,因為它們將鎖定資料庫中的記錄,並可能導致與其他並行執行事務的 死鎖 。保持封裝在事務中的操作儘可能短,並最大限度地減少對鎖定的資料量的影響。