溫馨提示×

溫馨提示×

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

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

閑聊編程與Oracle一致性和“保鏢”事務(wù)

發(fā)布時間:2020-07-21 15:59:05 來源:網(wǎng)絡(luò) 閱讀:457 作者:長路慢 欄目:關(guān)系型數(shù)據(jù)庫

最近很火的話題,為什么學(xué)Python?

    很多人說火?。∮帜苋斯ぶ悄?,又能大數(shù)據(jù)的,當(dāng)然很火喜歡學(xué)習(xí)的人很多,高薪職位更容易帶動潮流。這個觀點首先我不反對,我大學(xué)只學(xué)習(xí)過兩門shell與java,真正學(xué)習(xí)都是自學(xué),目的不是開發(fā),為了鍛煉自己的編程思想而學(xué)習(xí),為了以后學(xué)習(xí)編程少走一些彎路而學(xué)習(xí)。

    自己也是選擇Python,為什么,實習(xí)后發(fā)展發(fā)展方向是數(shù)據(jù)庫,后期可能DBA,也可能走數(shù)據(jù)分析等業(yè)務(wù)路線,這都不要緊重要的是要為以后結(jié)合工作把自己能力提升,個人競爭力提前打好路線,無論做DBA數(shù)據(jù)庫服務(wù)器運維SHELL腳本和Pyhton與perl無疑最優(yōu)選擇,那么如果走數(shù)據(jù)分析等Python也可以發(fā)揮自己能用處,對于自己的職業(yè)發(fā)展規(guī)劃有很大幫助,很實用的意義,為了幾年后更好的用于工作,我感覺這才是一個不熱衷于編程,不對編程狂熱的技術(shù)人員出發(fā)點!不要以這兩年火,發(fā)展前景,底薪高等為學(xué)習(xí)的基礎(chǔ)點,這樣空洞無規(guī)劃學(xué)習(xí),心態(tài)首先是不端正,其次你會隨時代變化而落后!

    昨天淺談了一下數(shù)據(jù)的的完整性,那么就是數(shù)據(jù)的精確性和可靠性,我們要保證實體完整,參照完整,域完整,用戶自定義完整,這時候回過頭看一看約束真是重要!

    一致性都是啥意思?

        咱們從實際出發(fā),一致性字面意思聽,都知道數(shù)據(jù)是一致的,在地點一查詢銀行卡余額是100元,換個地方查詢卻不失100元,這是我們不可接受的。那么數(shù)據(jù)在數(shù)據(jù)庫中會時時刻刻伴隨著數(shù)據(jù)讀寫操作,這就對數(shù)據(jù)庫的狀態(tài)要求特別高,也就是說數(shù)據(jù)庫每次操作改變,都可以被接受,讀取也都是正常的,就是數(shù)據(jù)庫的一致性體現(xiàn),有些時候不是數(shù)據(jù)庫真實可靠狀態(tài),那么就認為不一致。

    “保鏢”出場

        說起來Oracle這些完整性啊,一致性啊也都算是Oracle內(nèi)置的"大老板",都配有保鏢來保護,那么我們來說一說完整性的保鏢事務(wù)管理。

         事務(wù)管理可不簡單,保證數(shù)據(jù)庫中數(shù)據(jù)一致性,在前面我們說到,當(dāng)用提交和回滾操作都是一個事務(wù)的提交或者事務(wù)的回滾,我們的SQL語句是被事務(wù)語所包含。事務(wù)關(guān)鍵字是transaction來表示,而且有l(wèi)ife cycle,事務(wù)開始,執(zhí)行和結(jié)束,而事務(wù)的開始是隱式的,結(jié)束則用指令動作去完成。

      Oracle中控制事務(wù)常用的命令:

        1、commit

            英語字面翻譯過來就是提交,這是作為事務(wù)結(jié)束的標志,使用這個命令的時候意味著什么,意味著本次事務(wù)的數(shù)據(jù)將會被存儲到我們的磁盤里,改變數(shù)據(jù)庫的狀態(tài)可靠的可接受的狀態(tài),對于開發(fā)來說最安全有效的方式是顯示數(shù)據(jù)提交,在提交前,其實數(shù)據(jù)庫已經(jīng)更新了但是沒有得到數(shù)據(jù)庫的認可,通過事務(wù)結(jié)束命令來認可操作,提交占用資源非常少,1條于1000條花費的提交數(shù)據(jù)庫資源是一樣的。

        2、rollback

            英語字面翻譯過來回滾,我們在事務(wù)提交之前發(fā)出的撤銷命名,這時候數(shù)據(jù)庫更新沒有得到認可,當(dāng)事務(wù)結(jié)束rollback時候會回滾當(dāng)前包含的數(shù)據(jù),回到上一次的commit狀態(tài),這個過程會先讀取回滾段信息,利用這些信息將數(shù)據(jù)庫中已發(fā)生的修改重新恢復(fù),如果用了delete命令刪除數(shù)據(jù),那么在rollback時候就會insert into數(shù)據(jù),對于數(shù)據(jù)庫來說每次rollback是很耗費資源的,適用于異常處理操作,所以應(yīng)該在提交事務(wù)之前認真核對操作來代替回滾!

       3、savepoint 和 rollback savepoint

            在rollback的背景下,rollback回滾當(dāng)前事務(wù)所有操作,那么我們通過命令savepoint在事務(wù)中建立標起點,只允許用戶回滾之后的動作,rollback savepoint則是回滾標點以后的數(shù)據(jù),兩者是彌補rollback極端命令一種方式,事務(wù)回滾更靈活和可控性。

      事務(wù)的屬性和隔離級別

          1、read only --將無法在事務(wù)內(nèi)修改數(shù)據(jù),而且這能在事務(wù)的開頭使用,數(shù)據(jù)庫狀態(tài)將被凍結(jié),數(shù)據(jù)庫狀態(tài)與事務(wù)開始狀態(tài)一致

          2、read write --可讀可寫狀態(tài),數(shù)據(jù)庫默認是此狀態(tài)

          3、serializable --隔離級別,指定串行化事務(wù),可以實現(xiàn)與只讀功能相同,隔離其他數(shù)據(jù)庫狀態(tài)的影響,但是允許DML操作,不識別其他事務(wù)對數(shù)據(jù)庫的修改,即使提交,但是不代表無視原表數(shù)據(jù)的修改,表數(shù)據(jù)其實已經(jīng)修改,只是本事務(wù)不識別

          4、read commited --隔離級別的默認級別,只能讀取其他事務(wù)已經(jīng)提交修改的,對于未提交的數(shù)據(jù),只有修改事務(wù)本身才可以進行讀取。

      事務(wù)處理原則

          1、原子性(Atomicity)

          2、一致性(Consistency)

          3、隔離性(Lsolation)

          本帖子會后續(xù)持續(xù)更新

      

向AI問一下細節(jié)

免責(zé)聲明:本站發(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