首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi C/S 事務控制深度解析:隱式與顯式、TDatabase 與 Pass-through SQL 雙軌制

     編輯:Delphi

18.3.2 事務控制兩大範式

隱式控制(預設): BDE 自動為每筆寫入操作建立獨立事務。優點:簡單、衝突最小;缺點:每筆記錄網路往返,效能低落、不適合批次業務。

顯式控制: 開發者決定事務邊界,兩大實作路徑:

  1. TDatabase 元件方法/屬性: 跨資料庫、輕量、標準化。
  2. TQuery Pass-through SQL: 需 C/S 版 + SQL Links + SQLPASSTHROUGH MODE = NOT SHARED,直通伺服器原生事務語法(如 BEGIN TRANSACTION),利用進階特性(儲存點、分散式事務等)。

TDatabase 顯式事務完整操作手冊

核心方法/屬性

成員作用
StartTransaction在 TransIsolation 指定隔離等級下開啟事務
Commit永久保存修改並結束事務
Rollback撤銷修改並結束事務
TransIsolation控制併發事務可見性層級

隔離等級語義與伺服器支援矩陣

等級語義OracleSybaseInterBaseMS SQL
tiDirtyRead可讀未提交修改(最低隔離)Read CommittedRead CommittedRead CommittedRead Committed
tiReadCommitted (預設)僅可讀已提交修改Read CommittedRead CommittedRead CommittedRead Committed
tiRepeatableRead事務期間資料快照不變(最高隔離)Repeatable Read不支援Repeatable ReadRepeatable Read

請求等級超過伺服器能力時,Delphi 自動升級至更高支援等級。

經典銀行轉帳範例

Database.StartTransaction;
try
  Savings.Amount := Savings.Amount - 100;  // 借方
  Checking.Amount := Checking.Amount + 100; // 貸方
  Database.Commit;  // 兩筆同生共死
except
  Database.Rollback; // 任一失敗全盤回滾
  raise;
end;

Commit 必須包裹在 try...except 中處理併發衝突重試;Rollback 常用於異常處理或使用者取消操作。

Pass-through SQL 與本地事務補充

  • Pass-through 需獨立 TDatabase、NOT SHARED 模式、正確 SQL Links 配置。
  • BDE 同樣支援 Paradox/dBASE 本地事務:啟動時記錄舊緩衝,回滾時還原,鎖定記錄至提交/回滾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved