您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么理解oracle中的事務”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么理解oracle中的事務”吧!
一組SQL語句操作要成為事務,數據庫管理系統必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和持久性(Durability),這就是ACDI特性。
原子性:是指事物中包含的所有操作要么全做,要么全不做,也就是說事物的所有活動在數據庫中要么全部反映,要么全部不反映,一保證數據時一致的。
一致性:是指數據庫在事務操作前和操作處理,其中的數據必須都滿足業務規定的約束。
隔離性:是指數據庫允許多個并發事務同時對其中的數據進行讀寫好修改的能力,隔離性可以防止事務的并發執行時,由于他們的操作命令交叉執行而導致的數據不一致狀態。
持久性:是指當事務結束后,它對數據庫中的影響是永久的,即便系統遇到故障的情況下,數據也不會丟失。
數據庫事務由以下的部分組成:
一個或多個DML 語句
一個 DDL(Data Definition Language – 數據定義語言) 語句
一個 DCL(Data Control Language – 數據控制語言) 語句
事務的執行過程:
以第一個 DML 語句的執行作為開始
以下面的其中之一作為結束:
COMMIT 或 ROLLBACK 語句
DDL 或 DCL 語句(自動提交)
用戶會話正常結束
系統異常終了
備注:使用COMMIT 和 ROLLBACK語句,我們可以: 確保數據完整性;數據改變被提交之前預覽;將邏輯上相關的操作分組。
事務控制語句
Set transaction:設置事務的屬性
Set constrains:設置當前事務的約束模式,設置約束是修改數據的時候,立即起作用,還是當前事務結束后應用。
Savepoint :在事務中建立一個存儲點,回滾時,可以指定回滾到什么地方,然后重新執行
Release savepoint:刪除一個存儲點
Rollback:回滾事務。級取消對數據庫所做的任何修改
Commit:提交事務,把事務中對數據庫的修改進行永久保存
數據異常
因為Oracle中支持多個事務并發執行,所以會出現下面的數據異常。
錯讀|臟讀:當user1正在讀數據庫中的表A時,user2正在修改表A,user2修改完了,user1又讀一遍表A,user1讀出的是修改過的數據,而user2又撤消修改了,user1的讀取表A,稱為“錯讀”或者“臟讀”
非重復讀|不重復讀:是指一個事務讀取數據庫中的數據后,另一個事務則更新了數據,當第一個事務再次讀取其中的數據時,就會發現數據已經發生了改變,這就是非重復讀取。非重復讀取所導致的結果就是一個事務前后兩次讀取的數據不相同。
假讀|幻讀:如果一個事務基于某個條件讀取數據后,另一個事務則更新了同一個表中的數據,這時第一個事務再次讀取數據時,根據搜索的條件返回了不同的行,這就是假讀。
事務中遇到的這些異常與事務的隔離性設置有關,事務的隔離性設置越多,異常就出現的越少,但并發效果就越低,事務的隔離性設置越少,異常出現的越多,并發效果越高。
選擇隔離層
針對3中讀取的數據時產生的不一致現象,在ANSI SQL標準92中定義了4個事務的隔離級別.如下圖所示:
隔離級別 | 錯讀|臟讀 | 非重復讀|不重復讀 | 假讀|幻讀 |
Read uncommitted(非提交讀) | 是 | 是 | 是 |
Read committed(提交讀) | 否 | 是 | 是 |
Repeatable read(可重復讀) | 否 | 否 | |
Serializable(串行讀) | 否 | 否 | 否 |
Oracle默認的隔離級別是read committed
Oracle支持上述地址隔離層中的兩種read committed和Serializable除此之外oracle中還設置了read only和read write隔離層
Serializable:設置事務的隔離層為它時,
Read only :事務中不能有任何修改數據庫中的數據的操作語句,如insert、update、delete、create語句,read only 是Serializable的子集,區別是read only只讀,Serializable和執行DML語句。
Read write:是默認設置,改選項表示在事務中可以有訪問語句。修改語句。但不經常使用
設置事務的屬性
建立 set transaction的語句
如:
Set transaction read noly
或:
Set transaction read write
或:
Set transaction isolation level read commnitted
或:
Set transaction isolation level serializable
注意:這些語句是互斥的。不能同時設置兩個或兩個以上的選項
到此,相信大家對“怎么理解oracle中的事務”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。