首頁 >資料庫 >mysql教程 >SQL 交易:確保資料完整性和一致性

SQL 交易:確保資料完整性和一致性

Patricia Arquette
Patricia Arquette原創
2024-12-28 00:41:09503瀏覽

SQL Transactions: Ensuring Data Integrity and Consistency

解釋 SQL 中的交易

SQL 中的

交易 是作為單一邏輯工作單元執行的一系列一個或多個 SQL 操作。即使面對系統故障或錯誤,交易也可確保資料庫內的資料一致性、完整性和可靠性。他們遵循ACID屬性來維護資料庫穩定性。


交易的主要特徵

  1. 原子性:
    確保事務中的所有操作均已成功完成。如果任何操作失敗,整個交易將回滾到其初始狀態。

  2. 一致性:
    確保資料庫從一種有效狀態轉換到另一種有效狀態。交易必須遵守所有已定義的規則,例如約束和觸發器。

  3. 隔離:
    確保同時發生的多個事務不會相互幹擾。每筆交易的運作就好像它是系統中唯一的交易一樣。

  4. 耐用性:
    確保一旦提交事務,即使在系統崩潰的情況下,其變更也是永久性的。


交易控制語句

  1. 開始交易: 開始新的交易。
   BEGIN TRANSACTION;
  1. 提交: 將交易期間所做的所有變更永久保存到資料庫中。
   COMMIT;
  1. 回滾: 撤銷交易期間所做的所有更改,將資料庫返回到先前的狀態。
   ROLLBACK;
  1. 保存點: 在事務中建立保存點以回滾到特定點而不影響整個事務。
   SAVEPOINT SavePointName;
  1. 回滾到保存點: 將交易恢復到指定的保存點。
   ROLLBACK TO SavePointName;

交易範例

場景:在兩個銀行帳戶之間轉帳。

BEGIN TRANSACTION;

-- Deduct from Account A
UPDATE Accounts
SET Balance = Balance - 100
WHERE AccountID = 1;

-- Add to Account B
UPDATE Accounts
SET Balance = Balance + 100
WHERE AccountID = 2;

-- Check for errors and commit the transaction
IF @@ERROR = 0
    COMMIT;
ELSE
    ROLLBACK;

說明

    交易使用 BEGIN TRANSACTION 開始。
  1. A帳戶餘額減少,B帳戶餘額增加。
  2. 如果沒有發生錯誤,COMMIT 會儲存變更。否則,ROLLBACK 將撤銷所有變更。

巢狀事務

事務可以嵌套,但只有最外層的 COMMIT 才會最終確定變更。然而,每個 ROLLBACK 都會影響整個事務層次結構。


   BEGIN TRANSACTION;

ACID 屬性詳細資料

  1. 原子性: 如果事務中的任何一步失敗,則整個事務都會失敗。例如:
   COMMIT;
  1. 一致性: 確保資料庫遵循所有規則,例如外鍵約束。例如:
   ROLLBACK;
  1. 隔離

    交易不會互相干擾。隔離等級包括:

    • 讀取未提交:事務可以讀取未提交的變更。
    • 讀取已提交:交易僅看到已提交的變更。
    • 可重複讀取:確保在事務中讀取相同的資料。
    • 可序列化:防止其他交易存取受影響的行。
  2. 耐用性:

    一旦提交,更改就是永久性的。即使在崩潰時,COMMIT 也能確保資料保存。


交易用例

  • 銀行系統:確保原子資金轉移。
  • 電子商務:確保僅在庫存更新時建立訂單。
  • 庫存管理:防止庫存調整期間部分更新。

交易優勢

  • 保證資料的一致性和完整性。
  • 提供錯誤恢復機制。
  • 透過隔離等級支援並發資料庫操作。

交易的缺點

  • 由於鎖定機制可能會降低效能。
  • 管理不善可能導致死鎖或資源爭用。

事務是資料庫系統的基石,確保關鍵操作中資料的可靠性、一致性和正確性。

嗨,我是 Abhay Singh Kathayat!
我是一名全端開發人員,擁有前端和後端技術的專業知識。我使用各種程式語言和框架來建立高效、可擴展且用戶友好的應用程式。
請隨時透過我的商務電子郵件與我聯繫:kaashshorts28@gmail.com。

以上是SQL 交易:確保資料完整性和一致性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn