日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Oracle事務(transaction)詳解

瀏覽:295日期:2023-03-12 15:25:04
目錄
  • 一、數據異常
  • 二、隔離級別:
    • 1、設置隔離級別
  • 三、數據庫鎖:
    • 1、Oracle中的鎖
  • 四、事務組成:
    • 五、事務的分類:
      • 1、顯式事務:
      • 2、隱式事務:
    • 六、事務控制命令
      • 1、提交事務
      • 2、回滾事務
    • 七、示例

      一、數據異常

      因為Oracle中支持多個事務并發執行,所以會出現下面的數據異常。

      • 臟讀(Dirty Read):事務T1更新了一行數據,還沒有提交所做的修改,T2讀取更新后的數據,T1回滾,T2讀取的數據無效,這種數據稱為臟讀數據。
      • 不可重復讀(UNrepeatable Read):事務T1讀取一行數據,T2修改了T1剛剛讀取的記錄,T1再次查詢,發現與第一次讀取的記錄不相同,稱為不可重復讀。
      • 幻讀(Phantom Read):事務T1讀取一條帶WHERE條件的語句,返回結果集,T2插入一條新紀錄,恰好也是T1的WHERE條件,T1再次查詢,結果集中又看到T2的記錄,新紀錄就叫做幻讀。

      事務中遇到的這些異常與事務的隔離性設置有關,事務的隔離性設置越多,異常就出現的越少,但并發效果就越低,事務的隔離性設置越少,異常出現的越多,并發效果越高。

      二、隔離級別:

      針對讀取數據時可能產生的不一致現象,在SQL92標準中定義了4個事務的隔離級別:

      • NO_TRANSACTION 不支持事務
      • READ_UNCOMMITED 允許臟讀、不可重復讀、幻讀
      • READ_COMMITED 允許不可重復讀、幻讀,不允許臟讀
      • REPEATABLE 允許幻讀,不允許臟讀、不可重復讀
      • SERIALIZABLE 臟讀、不可重復讀、幻讀都不允許

      Oracle默認的隔離級別是read committed。

      Oracle支持SQL92標準的READ_COMMITED、SERIALIZABLE,自身特有的Read only和Read write隔離級別。

      • Read only:事務中不能有任何修改數據庫中數據的操作語句,是Serializable的一個子集。
      • Read write:它是默認設置,該選項表示在事務中可以有訪問語句、修改語句,但不經常使用。

      1、設置隔離級別

      設置一個事務的隔離級別:

      SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY; SET TRANSACTION READ WRITE;

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

      設置單個會話的隔離級別:

      ALTER SESSION SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ALTER SESSION SET TRANSACTION ISOLATION SERIALIZABLE;

      三、數據庫鎖:

      在數據庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。

      • 排它鎖:(X鎖,eXclusive Locks)
        當有DML語句執行的時候,設計的行都會加上排它鎖,其他事物不能進行讀取修改。
      • 共享鎖:(S鎖,Shared Locks)
        加了共享鎖的數據,可以被其他事物讀取,但不能修改。如select語句。

      為了保證性能:樂觀鎖,悲觀鎖

      • 悲觀鎖:每次都是假設數據肯定會沖突,數據開始讀取時就把數據給鎖住。
      • 樂觀鎖:每次都是假設一般情況下不會發生數據沖突,只有數據更新提交的時候,才會對數據的沖突與否進行檢測,如果發生沖突,返回錯誤信息讓用戶處理。

      在Oracle中最主要的鎖是DML鎖(data locks,數據鎖),DML鎖的目的在于保證并發情況下的數據完整性。在Oracle數據庫中,DML鎖主要包括TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX鎖稱為事務鎖或行級鎖。

      1、Oracle中的鎖

      鎖有“共享鎖”、“排它鎖”,“共享排它鎖”等多種類型,而且每種類型又有“行級鎖” (一次鎖住一條記錄),“頁級鎖” (一次鎖住一頁,即數據庫中存儲記錄的最小可分配單元),“表級鎖” (鎖住整個表)。

      (1)共享鎖(S鎖)
      添加該S鎖。在該鎖定模式下,不允許任何用戶更新表。但是允許其他用戶發出select …from for update命令對表添加RS鎖。

      lock table in share mode

      (2)排他鎖(X鎖)
      添加X鎖。在該鎖定模式下,其他用戶不能對表進行任何的DML和DDL操作,該表上只能進行查詢。

      lock table in exclusive mode

      (3)行級共享鎖(RS鎖)
      通常是通過語句添加的,同時該方法也是我們用來手工鎖定某些記錄的主要方法。比如,當我們在查詢某些記錄的過程中,不希望其他用戶對查詢的記錄進行更新操作,則可以發出這樣的語句。當數據使用完畢以后,直接發出rollback命令將鎖定解除。當表上添加了RS鎖定以后,不允許其他事務對相同的表添加排他鎖,但是允許其他的事務通過DML語句或lock命令鎖定相同表里的其他數據行。

      select … from for update

      (4)行級排他鎖(RX鎖)
      當進行DML操作時會自動在被更新的表上添加RX鎖,或者也可以通過執行lock命令顯式的在表上添加RX鎖。在該鎖定模式下,允許其他的事務通過DML語句修改相同表里的其他數據行,或通過lock命令對相同表添加RX鎖定,但是不允許其他事務對相同的表添加排他鎖(X鎖)。

      (5)共享行級排他鎖(SRX鎖)
      添加SRX鎖。該鎖定模式比行級排他鎖和共享鎖的級別都要高,這時不能對相同的表進行DML操作,也不能添加共享鎖。

      lock table in share row exclusive mode

      上述幾種鎖模式中,RS鎖是限制最少的鎖,X鎖是限制最多的鎖。當程序對所做的修改進行提交(Commit)或回滾(Rollback)后,鎖住的資源便會得到釋放,從而允許其他用戶進行操作。如果兩個事務,分別鎖定一部分數據,而都在等待對方釋放鎖才能完成事務操作,這種情況下就會發生死鎖。

      下圖列出產生鎖定模式的SQL語句:

      四、事務組成:

      一條或者多條DML,[一條DDL]和一條DCL。

      五、事務的分類:

      1、顯式事務:

      • 顯式的調用DCL。
      • 只有用到COMMIT以后才會真正寫入數據庫,也持久化了。

      2、隱式事務:

      • 如果人工要使用隱式事務,SET AUTOCOMMIT ON (只針對一個連接)
      • 以下情況為自動提交:
        1)正常執行完成的DDL語句:create、alter、drop
        2)正常執行完場的DCL語句GRANT、REVOKE
        3)正常退出的SQLPlus或者SQL Developer等客戶端

      六、事務控制命令

      1、提交事務

      在執行使用COMMIT語句可以提交事務,當執行了COMMIT語句后,會確認事務的變化,結束事務,刪除保存點,釋放鎖。當使用COMMIT語句結束事務之后,其他會話將可以查看到事務變化后的新數據。

      2、回滾事務

      保存點(savepoint):是事務中的一點,用于取消部分事務,當結束事務時,會自動的刪除該事務所定義的所有保存點。當執行ROLLBACK時,通過指定保存點可以回退到指定的點。

      設置保存點:

      Savepoint a;

      刪除保存點:

      Release Savepoint a;

      回滾部分事務:

      Rollback To a;

      回滾全部事務:

      Rollback;

      七、示例

      銀行轉帳的例子是最經典的事務示例:

      -- 從賬戶一向賬戶二轉賬DECLARE    v_money     NUMBER(8, 2); -- 轉賬金額    v_balance   account.balance%TYPE; -- 賬戶余額BEGIN    v_money := &轉賬金額; -- 輸入轉賬金額  -- 從賬戶一減錢      UPDATE account    SETbalance = balance - v_money WHERE     id = &轉出賬戶  RETURNING balance INTO v_balance;    IF SQL%notfound THENraise_application_error(-20001, "沒有該賬戶:" || &轉出賬戶);    END IF;    IF v_balance < 0 THENraise_application_error(-20002, "賬戶余額不足");    END IF;  -- 向賬戶二加錢    UPDATE account    SETbalance = balance + v_money    WHEREid = &轉入賬戶;    IF SQL%notfound THENraise_application_error(-20001, "沒有該賬戶:" || &轉入賬戶);    END IF;  -- 如果沒有異常,則提交事務    COMMIT;    dbms_output.put_line("轉賬成功");EXCEPTION    WHEN OTHERS THENROLLBACK; -- 出現異常則回滾事務dbms_output.put_line("轉賬失敗:");dbms_output.put_line(sqlerrm);END;

      到此這篇關于Oracle事務(transaction)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

      標簽: Oracle
      相關文章:
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      91成人精品视频| 日韩精品亚洲一区二区三区免费| 久久午夜影视| 精品国产美女a久久9999| 综合亚洲自拍| 午夜国产精品视频免费体验区| 麻豆国产欧美日韩综合精品二区| 青草av.久久免费一区| 福利一区和二区| 伊人影院久久| 日韩精品中文字幕第1页| 免费亚洲婷婷| 国产精品视频一区二区三区四蜜臂| 亚洲字幕久久| 欧美专区18| 国内亚洲精品| 蜜桃视频在线网站| 97精品国产一区二区三区| 国产精品美女午夜爽爽| 亚洲日本久久| 亚洲精品黄色| 亚洲精品无吗| 中文字幕一区日韩精品| 美女精品网站| 精品中文字幕一区二区三区av| 日韩精品中文字幕第1页| 国产精品啊啊啊| 欧美在线综合| 性色一区二区| 亚洲黑丝一区二区| 国产精品麻豆久久| 精品国产亚洲一区二区三区大结局| 中文视频一区| 丝瓜av网站精品一区二区| 免费久久99精品国产自在现线| 久久精品亚洲人成影院| 亚洲深夜视频| 日韩欧美精品综合| 成人欧美一区二区三区的电影| 国产日韩欧美一区在线| 日韩国产在线不卡视频| 免费国产亚洲视频| 日本在线不卡视频一二三区| 日韩福利视频网| 91精品国产一区二区在线观看| 日本在线视频一区二区| 青草综合视频| 麻豆视频观看网址久久| 国产+成+人+亚洲欧洲在线| аⅴ资源天堂资源库在线| 天堂√中文最新版在线| 久久网站免费观看| 亚洲欧洲一区二区天堂久久| 日韩精品免费一区二区三区| 成人国产精选| 日韩欧美自拍| 91久久亚洲| 亚州国产精品| 国产精品2区| av在线最新| 亚洲女同一区| 亚洲精品成人一区| 91成人在线网站| 久久精品国产网站| 日韩精品一区二区三区免费观影 | 国产精品18| 麻豆国产91在线播放| 国产精品视频3p| 精品国产精品国产偷麻豆| 日韩中文在线电影| 首页欧美精品中文字幕| 欧美精品福利| 日本久久精品| 国产一区成人| 国产精品视频一区二区三区综合| 日韩免费在线| 在线一区欧美| 国产欧美日韩| 久久国产亚洲精品| 久久www成人_看片免费不卡| 欧美视频一区| 性感美女一区二区在线观看| 亚洲欧美日本视频在线观看| 777久久精品| 日本不卡免费高清视频在线| 国产一区白浆| 国产一区丝袜| 亚洲永久字幕| 精品一区视频| 国产午夜精品一区二区三区欧美| 国产精品视频一区视频二区| 日韩理论视频| 在线免费观看亚洲| 美女视频黄久久| 亚洲精品1区| 国产日韩欧美一区二区三区 | 亚洲精品大片| 黑人精品一区| 日本不卡一区二区| 欧美日韩中文字幕一区二区三区| 日韩精品一区二区三区免费视频 | 免费成人在线视频观看| 国产一区二区三区久久久久久久久| 播放一区二区| 成人高清一区| 喷白浆一区二区| 久久99国产精品视频| 免费精品视频| 中文字幕在线免费观看视频| 综合国产在线| 久久久成人网| 欧美激情视频一区二区三区在线播放| 亚洲午夜精品久久久久久app| 欧美激情91| 亚州国产精品| 午夜av一区| 国产激情久久| 亚洲日本欧美| 亚洲欧洲一区| 夜鲁夜鲁夜鲁视频在线播放| 日韩视频一二区| 国产亚洲综合精品| 欧美二三四区| 激情综合婷婷| 日本a级不卡| 欧美va天堂| 久久精品国产99| 日韩不卡手机在线v区| 亚洲精品一二三区区别| 国产成人久久| 国产精品色在线网站| 国产一级久久| 色婷婷久久久| 高清av一区| 国产精品白丝久久av网站| 综合一区av| 日韩专区欧美专区| 天堂网在线观看国产精品| 日韩精品dvd| 国产成人精品一区二区三区视频| 日本精品另类| 免费美女久久99| 亚洲欧洲一区| 国产综合精品| 韩国久久久久久| 美女久久久久久| 综合激情网站| 亚洲精品一区二区在线看| 日韩欧美1区| 97精品一区| 国产精品99在线观看| 久久久亚洲欧洲日产| 国产人成精品一区二区三| 日韩和欧美一区二区| 亚洲精品进入| 欧美一级全黄| 国产精品亲子伦av一区二区三区| 国产日韩欧美一区二区三区 | 国产激情在线播放| 久久精品国产999大香线蕉 | 久久一区二区中文字幕| 神马午夜久久| 激情丁香综合| 国产亚洲综合精品| 中文无码日韩欧| 日韩精选在线| 国产日韩欧美三区| 国产精品成人自拍| 国产一区二区三区精品在线观看| 精品国产亚洲一区二区三区| 麻豆精品一区二区综合av| 久久精品资源| 国产精品日本一区二区不卡视频| 日本亚州欧洲精品不卡| 一区二区三区国产在线| 无码日韩精品一区二区免费| 偷拍亚洲精品| 日韩高清成人在线| 国产乱码精品一区二区三区亚洲人| 国产免费av国片精品草莓男男| 国产精品v亚洲精品v日韩精品| 老司机精品在线| 国产网站在线| 欧美精品一区二区久久| 视频一区二区欧美| 国产成人调教视频在线观看| 好看的亚洲午夜视频在线| 国产欧美二区| 99久久精品网站| 日韩精品国产欧美| 欧美成a人免费观看久久| 日韩动漫一区| 亚洲夜间福利| 久久gogo国模啪啪裸体| 亚洲免费成人| 成人国产精品一区二区网站| 亚洲人成高清| 国模 一区 二区 三区| 国产精品v亚洲精品v日韩精品| 亚洲欧美日韩国产综合精品二区|