溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么理解oracle中的事務(wù)

發(fā)布時間:2021-11-11 14:42:48 來源:億速云 閱讀:188 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容主要講解“怎么理解oracle中的事務(wù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么理解oracle中的事務(wù)”吧!

一組SQL語句操作要成為事務(wù),數(shù)據(jù)庫管理系統(tǒng)必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和持久性(Durability),這就是ACDI特性。

原子性:是指事物中包含的所有操作要么全做,要么全不做,也就是說事物的所有活動在數(shù)據(jù)庫中要么全部反映,要么全部不反映,一保證數(shù)據(jù)時一致的。

一致性:是指數(shù)據(jù)庫在事務(wù)操作前和操作處理,其中的數(shù)據(jù)必須都滿足業(yè)務(wù)規(guī)定的約束。

隔離性:是指數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其中的數(shù)據(jù)進行讀寫好修改的能力,隔離性可以防止事務(wù)的并發(fā)執(zhí)行時,由于他們的操作命令交叉執(zhí)行而導(dǎo)致的數(shù)據(jù)不一致狀態(tài)。

持久性:是指當事務(wù)結(jié)束后,它對數(shù)據(jù)庫中的影響是永久的,即便系統(tǒng)遇到故障的情況下,數(shù)據(jù)也不會丟失。

數(shù)據(jù)庫事務(wù)由以下的部分組成:

一個或多個DML 語句

一個 DDL(Data Definition Language – 數(shù)據(jù)定義語言) 語句

一個 DCL(Data Control Language – 數(shù)據(jù)控制語言) 語句

事務(wù)的執(zhí)行過程:

以第一個 DML 語句的執(zhí)行作為開始

以下面的其中之一作為結(jié)束:

COMMIT 或 ROLLBACK 語句

DDL 或 DCL 語句(自動提交)

用戶會話正常結(jié)束

系統(tǒng)異常終了

備注:使用COMMIT 和 ROLLBACK語句,我們可以: 確保數(shù)據(jù)完整性;數(shù)據(jù)改變被提交之前預(yù)覽;將邏輯上相關(guān)的操作分組。

事務(wù)控制語句

Set transaction:設(shè)置事務(wù)的屬性

Set constrains:設(shè)置當前事務(wù)的約束模式,設(shè)置約束是修改數(shù)據(jù)的時候,立即起作用,還是當前事務(wù)結(jié)束后應(yīng)用。

Savepoint :在事務(wù)中建立一個存儲點,回滾時,可以指定回滾到什么地方,然后重新執(zhí)行

Release savepoint:刪除一個存儲點

Rollback:回滾事務(wù)。級取消對數(shù)據(jù)庫所做的任何修改

Commit:提交事務(wù),把事務(wù)中對數(shù)據(jù)庫的修改進行永久保存

數(shù)據(jù)異常

因為Oracle中支持多個事務(wù)并發(fā)執(zhí)行,所以會出現(xiàn)下面的數(shù)據(jù)異常。

錯讀|臟讀:當user1正在讀數(shù)據(jù)庫中的表A時,user2正在修改表A,user2修改完了,user1又讀一遍表A,user1讀出的是修改過的數(shù)據(jù),而user2又撤消修改了,user1的讀取表A,稱為“錯讀”或者“臟讀”

非重復(fù)讀|不重復(fù)讀:是指一個事務(wù)讀取數(shù)據(jù)庫中的數(shù)據(jù)后,另一個事務(wù)則更新了數(shù)據(jù),當?shù)谝粋€事務(wù)再次讀取其中的數(shù)據(jù)時,就會發(fā)現(xiàn)數(shù)據(jù)已經(jīng)發(fā)生了改變,這就是非重復(fù)讀取。非重復(fù)讀取所導(dǎo)致的結(jié)果就是一個事務(wù)前后兩次讀取的數(shù)據(jù)不相同。

假讀|幻讀:如果一個事務(wù)基于某個條件讀取數(shù)據(jù)后,另一個事務(wù)則更新了同一個表中的數(shù)據(jù),這時第一個事務(wù)再次讀取數(shù)據(jù)時,根據(jù)搜索的條件返回了不同的行,這就是假讀。

事務(wù)中遇到的這些異常與事務(wù)的隔離性設(shè)置有關(guān),事務(wù)的隔離性設(shè)置越多,異常就出現(xiàn)的越少,但并發(fā)效果就越低,事務(wù)的隔離性設(shè)置越少,異常出現(xiàn)的越多,并發(fā)效果越高。

選擇隔離層

 針對3中讀取的數(shù)據(jù)時產(chǎn)生的不一致現(xiàn)象,在ANSI SQL標準92中定義了4個事務(wù)的隔離級別.如下圖所示:

隔離級別

錯讀|臟讀

非重復(fù)讀|不重復(fù)讀

假讀|幻讀

Read uncommitted(非提交讀)

Read committed(提交讀)

Repeatable read(可重復(fù)讀)


Serializable(串行讀)

Oracle默認的隔離級別是read committed

Oracle支持上述地址隔離層中的兩種read committed和Serializable除此之外oracle中還設(shè)置了read only和read write隔離層

Serializable:設(shè)置事務(wù)的隔離層為它時,

Read only :事務(wù)中不能有任何修改數(shù)據(jù)庫中的數(shù)據(jù)的操作語句,如insert、update、delete、create語句,read only 是Serializable的子集,區(qū)別是read only只讀,Serializable和執(zhí)行DML語句。

Read write:是默認設(shè)置,改選項表示在事務(wù)中可以有訪問語句。修改語句。但不經(jīng)常使用

設(shè)置事務(wù)的屬性

建立 set transaction的語句

如:

Set transaction read noly

或:

Set transaction read write

或:

Set transaction isolation level read commnitted

或:

Set transaction isolation level serializable

注意:這些語句是互斥的。不能同時設(shè)置兩個或兩個以上的選項

到此,相信大家對“怎么理解oracle中的事務(wù)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI