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