本篇內(nèi)容主要講解“怎么理解oracle中的事務(wù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么理解oracle中的事務(wù)”吧!
目前累計(jì)服務(wù)客戶1000多家,積累了豐富的產(chǎn)品開(kāi)發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹(shù)立企業(yè)形象,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。一組SQL語(yǔ)句操作要成為事務(wù),數(shù)據(jù)庫(kù)管理系統(tǒng)必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和持久性(Durability),這就是ACDI特性。
原子性:是指事物中包含的所有操作要么全做,要么全不做,也就是說(shuō)事物的所有活動(dòng)在數(shù)據(jù)庫(kù)中要么全部反映,要么全部不反映,一保證數(shù)據(jù)時(shí)一致的。
一致性:是指數(shù)據(jù)庫(kù)在事務(wù)操作前和操作處理,其中的數(shù)據(jù)必須都滿足業(yè)務(wù)規(guī)定的約束。
隔離性:是指數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其中的數(shù)據(jù)進(jìn)行讀寫好修改的能力,隔離性可以防止事務(wù)的并發(fā)執(zhí)行時(shí),由于他們的操作命令交叉執(zhí)行而導(dǎo)致的數(shù)據(jù)不一致?tīng)顟B(tài)。
持久性:是指當(dāng)事務(wù)結(jié)束后,它對(duì)數(shù)據(jù)庫(kù)中的影響是永久的,即便系統(tǒng)遇到故障的情況下,數(shù)據(jù)也不會(huì)丟失。
數(shù)據(jù)庫(kù)事務(wù)由以下的部分組成:
一個(gè)或多個(gè)DML 語(yǔ)句
一個(gè) DDL(Data Definition Language – 數(shù)據(jù)定義語(yǔ)言) 語(yǔ)句
一個(gè) DCL(Data Control Language – 數(shù)據(jù)控制語(yǔ)言) 語(yǔ)句
事務(wù)的執(zhí)行過(guò)程:
以第一個(gè) DML 語(yǔ)句的執(zhí)行作為開(kāi)始
以下面的其中之一作為結(jié)束:
COMMIT 或 ROLLBACK 語(yǔ)句
DDL 或 DCL 語(yǔ)句(自動(dòng)提交)
用戶會(huì)話正常結(jié)束
系統(tǒng)異常終了
備注:使用COMMIT 和 ROLLBACK語(yǔ)句,我們可以: 確保數(shù)據(jù)完整性;數(shù)據(jù)改變被提交之前預(yù)覽;將邏輯上相關(guān)的操作分組。
事務(wù)控制語(yǔ)句
Set transaction:設(shè)置事務(wù)的屬性
Set constrains:設(shè)置當(dāng)前事務(wù)的約束模式,設(shè)置約束是修改數(shù)據(jù)的時(shí)候,立即起作用,還是當(dāng)前事務(wù)結(jié)束后應(yīng)用。
Savepoint :在事務(wù)中建立一個(gè)存儲(chǔ)點(diǎn),回滾時(shí),可以指定回滾到什么地方,然后重新執(zhí)行
Release savepoint:刪除一個(gè)存儲(chǔ)點(diǎn)
Rollback:回滾事務(wù)。級(jí)取消對(duì)數(shù)據(jù)庫(kù)所做的任何修改
Commit:提交事務(wù),把事務(wù)中對(duì)數(shù)據(jù)庫(kù)的修改進(jìn)行永久保存
數(shù)據(jù)異常
因?yàn)镺racle中支持多個(gè)事務(wù)并發(fā)執(zhí)行,所以會(huì)出現(xiàn)下面的數(shù)據(jù)異常。
錯(cuò)讀|臟讀:當(dāng)user1正在讀數(shù)據(jù)庫(kù)中的表A時(shí),user2正在修改表A,user2修改完了,user1又讀一遍表A,user1讀出的是修改過(guò)的數(shù)據(jù),而user2又撤消修改了,user1的讀取表A,稱為“錯(cuò)讀”或者“臟讀”
非重復(fù)讀|不重復(fù)讀:是指一個(gè)事務(wù)讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù)后,另一個(gè)事務(wù)則更新了數(shù)據(jù),當(dāng)?shù)谝粋€(gè)事務(wù)再次讀取其中的數(shù)據(jù)時(shí),就會(huì)發(fā)現(xiàn)數(shù)據(jù)已經(jīng)發(fā)生了改變,這就是非重復(fù)讀取。非重復(fù)讀取所導(dǎo)致的結(jié)果就是一個(gè)事務(wù)前后兩次讀取的數(shù)據(jù)不相同。
假讀|幻讀:如果一個(gè)事務(wù)基于某個(gè)條件讀取數(shù)據(jù)后,另一個(gè)事務(wù)則更新了同一個(gè)表中的數(shù)據(jù),這時(shí)第一個(gè)事務(wù)再次讀取數(shù)據(jù)時(shí),根據(jù)搜索的條件返回了不同的行,這就是假讀。
事務(wù)中遇到的這些異常與事務(wù)的隔離性設(shè)置有關(guān),事務(wù)的隔離性設(shè)置越多,異常就出現(xiàn)的越少,但并發(fā)效果就越低,事務(wù)的隔離性設(shè)置越少,異常出現(xiàn)的越多,并發(fā)效果越高。
選擇隔離層
針對(duì)3中讀取的數(shù)據(jù)時(shí)產(chǎn)生的不一致現(xiàn)象,在ANSI SQL標(biāo)準(zhǔn)92中定義了4個(gè)事務(wù)的隔離級(jí)別.如下圖所示:
隔離級(jí)別 | 錯(cuò)讀|臟讀 | 非重復(fù)讀|不重復(fù)讀 | 假讀|幻讀 |
Read uncommitted(非提交讀) | 是 | 是 | 是 |
Read committed(提交讀) | 否 | 是 | 是 |
Repeatable read(可重復(fù)讀) | 否 | 否 | |
Serializable(串行讀) | 否 | 否 | 否 |
Oracle默認(rèn)的隔離級(jí)別是read committed
Oracle支持上述地址隔離層中的兩種read committed和Serializable除此之外oracle中還設(shè)置了read only和read write隔離層
Serializable:設(shè)置事務(wù)的隔離層為它時(shí),
Read only :事務(wù)中不能有任何修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)的操作語(yǔ)句,如insert、update、delete、create語(yǔ)句,read only 是Serializable的子集,區(qū)別是read only只讀,Serializable和執(zhí)行DML語(yǔ)句。
Read write:是默認(rèn)設(shè)置,改選項(xiàng)表示在事務(wù)中可以有訪問(wèn)語(yǔ)句。修改語(yǔ)句。但不經(jīng)常使用
設(shè)置事務(wù)的屬性
建立 set transaction的語(yǔ)句
如:
Set transaction read noly
或:
Set transaction read write
或:
Set transaction isolation level read commnitted
或:
Set transaction isolation level serializable
注意:這些語(yǔ)句是互斥的。不能同時(shí)設(shè)置兩個(gè)或兩個(gè)以上的選項(xiàng)
到此,相信大家對(duì)“怎么理解oracle中的事務(wù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!