數據庫事務(Transaction)是指由一個或多個數據庫操作組成的邏輯單位,在這個單位中,要么所有的操作都執行成功,要么所有的操作都不執行,保證數據庫的一致性和完整性。
一個事務通常包括以下四個基本屬性(ACID 屬性):
原子性(Atomicity):事務中的所有操作要么全部執行成功,要么全部執行失敗回滾,不會出現只執行了部分操作的情況。
一致性(Consistency):事務執行前后,數據庫的狀態必須保持一致,即滿足所有的約束條件和完整性規則。
隔離性(Isolation):事務的執行不應該受到其他事務的干擾,即并發執行的事務之間應該相互隔離。
持久性(Durability):事務提交后,其對數據庫所做的修改應該永久保存在數據庫中,即使系統崩潰或重啟也應該不受影響。
當一個事務開始執行時,它會自動獲得一個鎖定,直到事務提交或回滾后才會釋放鎖定。如果多個事務同時執行相同的數據操作,可能會導致數據不一致或沖突,因此需要通過事務隔離機制來保證事務的隔離性。常用的事務隔離級別包括 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
在 SQL 中,可以使用 BEGIN TRANSACTION、COMMIT 和 ROLLBACK 等關鍵字來控制事務的提交和回滾。例如:
BEGIN TRANSACTION; -- 開始事務
UPDATE table SET column = value WHERE condition; -- 更新數據
INSERT INTO table (column1, column2) VALUES (value1, value2); -- 插入數據
COMMIT; -- 提交事務
如果事務執行過程中出現了錯誤,可以使用 ROLLBACK 關鍵字來回滾事務,恢復到事務開始執行前的狀態,例如:
BEGIN TRANSACTION; -- 開始事務
UPDATE table SET column = value WHERE condition; -- 更新數據
INSERT INTO table (column1, column2) VALUES (value1, value2); -- 插入數據
ROLLBACK; -- 回滾事務