控制事務(wù)
襄城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
銀行轉(zhuǎn)賬
李四給張三匯款
ACID
A:原子性:整個(gè)事務(wù)中所有的步驟是不可分割的,原子性原則規(guī)定一個(gè)事務(wù)的各個(gè)步驟都必須完成,否則整個(gè)事務(wù)都不會(huì)完成。即保證一個(gè)事務(wù)中所有的操作都能完成或者都不能完成,如果事務(wù)在完成之前出現(xiàn)任何錯(cuò)誤,那么數(shù)據(jù)庫(kù)自身必須保證自動(dòng)回滾所做過(guò)的任何事務(wù)部分(并且必須自動(dòng)進(jìn)行)
C:一致性:無(wú)論是事務(wù)前,事務(wù)中,事務(wù)后,數(shù)據(jù)始終處于一致的狀態(tài)。例如李四給張三匯款10000,那么就需要從李四賬戶減去10000,給張三的賬戶增加10000。Oracle使用撤銷段來(lái)保證數(shù)據(jù)的一致性。
I:隔離性:隔離性的原則規(guī)定,未完成的事務(wù)必須不可視。在某個(gè)事務(wù)進(jìn)行期間,只有執(zhí)行該事務(wù)的會(huì)話能看見所做的變化,而其他所有的會(huì)話看見的都是沒(méi)有變化的數(shù)據(jù)(而不是更改后的新值)。這個(gè)規(guī)定的邏輯含義是:首先,由于整個(gè)事務(wù)可能沒(méi)有全部完成,因此不允許其他用戶看到可能回滾的變化;其次,在某個(gè)事務(wù)進(jìn)行期間,數(shù)據(jù)是不連貫的,李四的賬戶減掉10000,但張三的賬戶還沒(méi)有增加10000。事務(wù)的隔離性要求數(shù)據(jù)庫(kù)必須對(duì)其他用戶隱藏正在進(jìn)行的事務(wù),這些用戶只能看到?jīng)]有被更新的數(shù)據(jù),只有在事務(wù)完成時(shí),他們才能看到所有變化。Oracle使用撤銷段來(lái)保證事務(wù)的隔離性。
創(chuàng)建練習(xí)環(huán)境:創(chuàng)建一個(gè)aa表,插入3條記錄,并提交事物。
查看aa表的記錄,插入一條記錄,當(dāng)我們執(zhí)行一條DML語(yǔ)句時(shí)候,就自動(dòng)開始了一個(gè)事物
此時(shí)insert記錄的事務(wù)并沒(méi)有提交,沒(méi)有提交事務(wù)就沒(méi)有真正的完成,此時(shí)還有rollback的機(jī)會(huì)。
Scott用戶在當(dāng)前會(huì)話中查看aa表時(shí)可以看到被插入的記錄
打開一個(gè)新的sqlplus會(huì)話,查看aa表時(shí)會(huì)發(fā)現(xiàn)并沒(méi)有新插入的記錄:這是事物的隔離性
在第一個(gè)sqlplus會(huì)話中提交事物
提交之后才能在第二個(gè)會(huì)話中看到被插入的第四條記錄
D:持久性:一旦使用commit命令來(lái)結(jié)束某個(gè)事務(wù),那么就必須保證數(shù)據(jù)庫(kù)不丟失這個(gè)事務(wù)。在事務(wù)進(jìn)行期間,隔離性的原則要求除了指定會(huì)話涉及的用戶之外的任何用戶都不能查看當(dāng)前所做的變化。不過(guò)事務(wù)一旦完成,所有用戶都必須能夠立即看到所做的變化,同時(shí)數(shù)據(jù)庫(kù)必須保證這些變化絕不會(huì)丟失。Oracle通過(guò)使用日志文件來(lái)滿足這個(gè)需求。日志文件具有兩
種形式:聯(lián)機(jī)重做日志文件,歸檔重做日志文件。
一個(gè)正確配置的oracle數(shù)據(jù)庫(kù)是不可能丟失數(shù)據(jù)的。當(dāng)然用戶的錯(cuò)誤(包括不恰當(dāng)?shù)腄ML或刪除對(duì)象)也會(huì)造成數(shù)據(jù)的丟失
DDL語(yǔ)句有自動(dòng)提交功能(create、drop、truncate、alter)
創(chuàng)建表AA,插入一條記錄
回退事物
在表中插入一條記錄
在sqlplus中正常退出
在另外一個(gè)sqlplus中查看aa表中的記錄,會(huì)發(fā)現(xiàn)新插入的tom1的記錄了。如果使用sqlplus工具更改了數(shù)據(jù)之后,正常退出sqlplus時(shí),oracle會(huì)自動(dòng)提交事物。
目前aa表中只有tom1的記錄
模擬實(shí)例重啟
使用scott用戶連接,查看aa表中的內(nèi)容,發(fā)現(xiàn)insert tom2的記錄由于實(shí)例重啟自動(dòng)被回滾了。
使用autocommit實(shí)現(xiàn)事物的自動(dòng)提交
即使執(zhí)行回滾,查詢結(jié)果仍然包含新插入的數(shù)據(jù),關(guān)閉自動(dòng)提交時(shí)可以使用set autocommit off
關(guān)于事物的總結(jié):
需要注意的是,Commit:只是用來(lái)確認(rèn)這個(gè)數(shù)據(jù)已經(jīng)正式的修改了,不一定非得寫入硬盤,DBWn什么都不做。執(zhí)行commit命令時(shí)發(fā)生的所有物理操作時(shí)LGWR進(jìn)程將日志緩沖區(qū)的內(nèi)容寫入磁盤。DBWN進(jìn)程完全沒(méi)有執(zhí)行任何操作。DBWN進(jìn)程與提交事物處理沒(méi)有關(guān)系,不過(guò)最終DBWN進(jìn)程會(huì)將變化的數(shù)據(jù)塊寫入磁盤。
3.自動(dòng)提交和隱式提交:oracle在某些情況下可以進(jìn)行自動(dòng)提交:執(zhí)行DDL語(yǔ)句是一種情況,退出某個(gè)用戶進(jìn)程也是一種自動(dòng)提交。
如果對(duì)此有興趣,請(qǐng)掃下面二維碼免費(fèi)獲取更多詳情