柚子快報邀請碼778899分享:數(shù)據(jù)庫 oracle里的事務(wù)
柚子快報邀請碼778899分享:數(shù)據(jù)庫 oracle里的事務(wù)
事務(wù)是一組不可分割的數(shù)據(jù)庫操作,這些操作要么全部成功(提交),要么全部失?。ɑ貪L)。事務(wù)管理是數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的一個關(guān)鍵特性,它確保了數(shù)據(jù)庫在并發(fā)操作下的穩(wěn)定性和一致性。
1.?事務(wù)的基本屬性 (ACID)
事務(wù)具有四個基本屬性,統(tǒng)稱為 ACID 屬性:
Atomicity(原子性):事務(wù)中的所有操作要么全部執(zhí)行成功,要么全部不執(zhí)行。即便事務(wù)中的某個操作失敗,整個事務(wù)也會回滾到事務(wù)開始前的狀態(tài)。 Consistency(一致性):事務(wù)在開始和結(jié)束時,數(shù)據(jù)庫的狀態(tài)必須是一致的。即,事務(wù)的執(zhí)行不能破壞數(shù)據(jù)庫的約束和規(guī)則。 Isolation(隔離性):多個事務(wù)并發(fā)執(zhí)行時,一個事務(wù)的執(zhí)行結(jié)果不應(yīng)影響其他事務(wù)的執(zhí)行。Oracle 通過不同的隔離級別來控制并發(fā)事務(wù)之間的相互影響。 Durability(持久性):一旦事務(wù)提交(COMMIT),其結(jié)果就會永久保存到數(shù)據(jù)庫中,哪怕系統(tǒng)崩潰也不會丟失。
2.?事務(wù)的基本操作
Oracle 中事務(wù)的基本操作包括:
BEGIN TRANSACTION(隱式啟動事務(wù)):在 Oracle 中,事務(wù)通常隱式地啟動。每當(dāng)你執(zhí)行一條 INSERT、UPDATE、DELETE 或 SELECT FOR UPDATE 語句時,事務(wù)就自動開始了。 COMMIT(提交):提交事務(wù),將事務(wù)中的所有更改永久保存到數(shù)據(jù)庫中。 COMMIT; ROLLBACK(回滾):回滾事務(wù),撤銷事務(wù)中的所有未提交的更改,使數(shù)據(jù)庫恢復(fù)到事務(wù)開始前的狀態(tài)。 ROLLBACK; SAVEPOINT(保存點):在事務(wù)中創(chuàng)建一個保存點,允許你回滾到事務(wù)中的某個特定點,而不是回滾整個事務(wù)。 SAVEPOINT savepoint_name; ROLLBACK TO SAVEPOINT(回滾到保存點):將事務(wù)回滾到之前定義的保存點。 ROLLBACK TO savepoint_name;
3.?事務(wù)控制示例
假設(shè)你有一個名為 employees 的表,現(xiàn)在你要更新員工的薪水,并根據(jù)不同情況決定是否提交或回滾事務(wù):
-- 開始事務(wù)(隱式)
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
SAVEPOINT before_bonus;
-- 給銷售部門的員工增加獎金
UPDATE employees SET salary = salary + 1000 WHERE department_id = 20;
-- 檢查某些條件,如果不滿足,回滾獎金更新
ROLLBACK TO before_bonus;
-- 最后提交所有更改
COMMIT;
在這個例子中:
更新了部門ID為10的員工的薪水,隱式啟動了一個事務(wù)。創(chuàng)建了一個保存點?before_bonus。更新了部門ID為20的員工的薪水,增加了獎金。如果某些條件不滿足,可以回滾到保存點?before_bonus,撤銷獎金更新,但保留之前的薪水更新。最終,提交整個事務(wù),將更改永久保存。
4.?事務(wù)隔離級別
Oracle 支持四種事務(wù)隔離級別,用于控制事務(wù)之間的相互影響:
READ UNCOMMITTED:允許一個事務(wù)讀取其他事務(wù)尚未提交的更改??赡軐?dǎo)致臟讀(Dirty Read)問題。Oracle 默認(rèn)不支持這個隔離級別。 READ COMMITTED(默認(rèn)隔離級別):只允許事務(wù)讀取其他已提交的更改??梢苑乐古K讀,但可能會出現(xiàn)不可重復(fù)讀(Non-repeatable Read)問題。 REPEATABLE READ:保證在事務(wù)內(nèi)多次讀取相同數(shù)據(jù)時,數(shù)據(jù)是一致的(即其他事務(wù)不能修改或刪除該數(shù)據(jù))??梢苑乐古K讀和不可重復(fù)讀,但不能防止幻讀(Phantom Read)。Oracle 使用快照隔離來提供類似的效果。 SERIALIZABLE:提供最高的隔離級別,強制事務(wù)串行執(zhí)行,防止臟讀、不可重復(fù)讀和幻讀,但代價是降低了并發(fā)性。
5.?自動提交與顯式事務(wù)控制
在一些情況下(如使用 SQL*Plus 或其他工具),SQL 語句可能會自動提交。要完全控制事務(wù),建議顯式使用 COMMIT 和 ROLLBACK。
6.?事務(wù)的并發(fā)控制
Oracle 使用多版本并發(fā)控制(MVCC,Multi-Version Concurrency Control)來管理事務(wù)并發(fā)性。每個事務(wù)會看到一個一致性的快照,這意味著事務(wù)在執(zhí)行期間,看到的數(shù)據(jù)與其他事務(wù)不會相互影響。這種機制可以有效地減少鎖爭用并提高并發(fā)性能。
柚子快報邀請碼778899分享:數(shù)據(jù)庫 oracle里的事務(wù)
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。