SQL Server 中的事務是什么?
- 事務是應該作為一個單元執行的一組 SQL 陳述句,這意味著事務確保所有命令都成功或都不成功,如果事務中的命令之一失敗,則所有命令都失敗,并且在資料庫中修改的任何資料都將回滾,
比如您在做一個銀行轉賬操作,這涉及了2個操作, 扣款和收款, 必須保證這2個操作都成功,或者都失敗, 只把你的錢扣了,對方沒收到,肯定不行的 (有一個操作失敗了,都應該回滾到初始狀態)
如何在 SQL Server 中實作事務管理?
SQL Server 為我們提供了4個命令來實作管理事務
- 開啟事務: begin transaction (可簡寫為 begin tran, 表示事務已開始)
- 提交事務: commit (表示事務已成功完成,自事務開始以來執行的所有資料操作操作都提交到資料庫,并釋放事務占用的資源,)
- 回滾事務: rollback transaction (表示事務失敗,會將資料回滾到之前的狀態,)
- 保存事務: save transaction (這用于將事務劃分為多個單元,以便用戶有機會將事務回滾到某個點或位置,)
在 SQL Server 中實作事務的示例:
請使用以下 SQL 腳本創建并使用所需的測驗資料填充 Product 表,
IF OBJECT_ID('dbo.Product') IS NOT NULL
DROP TABLE dbo.Product
GO
CREATE TABLE dbo.Product
(
ProductID INT PRIMARY KEY,
Name VARCHAR(40),
Price INT,
Quantity INT
)
GO
INSERT INTO Product VALUES(101, 'Product-1', 100, 10)
INSERT INTO Product VALUES(102, 'Product-2', 200, 15)
INSERT INTO Product VALUES(103, 'Product-3', 300, 20)
INSERT INTO Product VALUES(104, 'Product-4', 400, 25)
SQL Server 中的 COMMIT 示例,
BEGIN TRANSACTION
INSERT INTO Product VALUES (105,'Product-5',500, 30)
UPDATE Product SET Price = 350 WHERE ProductID = 103
DELETE FROM Product WHERE ProductID = 103
COMMIT TRANSACTION
一旦提交事務,就不能回滾上述三個陳述句,提交事務后,現在您的產品將具有以下資料,
| ProductID | Name | Price | Quantity |
|---|---|---|---|
| 101 | Product-1 | 100 | 10 |
| 102 | Product-2 | 200 | 15 |
| 104 | Product-4 | 400 | 25 |
| 105 | Product-5 | 500 | 30 |
SQL Server 中的 ROLLBACK TRANSACTION 示例
SQL Server 中的 Rollback 命令用于撤消尚未保存到資料庫中的事務,并從事務開始處恢復到初始狀態,因此,如果您想將資料恢復到之前的狀態,那么您需要在寫入 SQL 陳述句后的任何時間使用 ROLLBACK 命令,但請記住,一旦寫入 COMMIT ,我們就無法回滾資料,
請執行以下陳述句以了解回滾命令,
BEGIN TRANSACTION
INSERT INTO Product VALUES(106,'Product-6',600, 30)
UPDATE Product SET Price =550 WHERE ProductID = 105
DELETE FROM Product WHERE ProductID = 104
當您執行上述事務并且您可以看到該事務未提交,您有機會使用 Rollback Transaction 命令回滾表上的所有操作,
了解 SQL Server 中的 @@Error 全域變數:
這是一個全域變數,我們可以使用這個變數來檢查是否有任何錯誤,讓我們看一個例子來理解這一點,正如您在下面的示例中看到的,首先我們使用 Begin Transaction 陳述句啟動事務,然后我們撰寫兩個插入陳述句,然后我們使用全域系統變數@@ERROR 檢查是否有錯誤,大于 0 的值意味著存在一些錯誤,如果有一些錯誤,那么我們回滾事務,否則我們提交事務,
BEGIN TRANSACTION
INSERT INTO Product VALUES(110,'Product-10',600, 30)
INSERT INTO Product VALUES(110,'Product-10',600, 30)
IF(@@ERROR > 0)
BEGIN
Rollback Transaction
END
ELSE
BEGIN
Commit Transaction
END
執行上述事務后,您將看到事務回滾了,這是因為我們嘗試在主鍵列中插入重復值,
為什么我們需要 SQL Server 中的事務?
我們需要 SQL Server 中的事務來保護企業資料(使企業資料保持一致并實作資料完整性),事務是對資料庫的一項或多項更改的傳播,例如,如果我們正在創建一條記錄或更新一條記錄,或者從表中洗掉一條記錄,那么我們正在對表執行事務,控制事務以確保資料完整性和處理資料庫錯誤非常重要,
SQL Server 中事務的經驗法則是什么?
SQL Server 中的事務規則告訴事務中的所有陳述句都應該成功執行,或者這些陳述句都不執行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499182.html
標籤:SQL Server
