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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle事務(wù)(transaction)詳解

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

      一、數(shù)據(jù)異常

      因?yàn)镺racle中支持多個(gè)事務(wù)并發(fā)執(zhí)行,所以會(huì)出現(xiàn)下面的數(shù)據(jù)異常。

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

      事務(wù)中遇到的這些異常與事務(wù)的隔離性設(shè)置有關(guān),事務(wù)的隔離性設(shè)置越多,異常就出現(xiàn)的越少,但并發(fā)效果就越低,事務(wù)的隔離性設(shè)置越少,異常出現(xiàn)的越多,并發(fā)效果越高。

      二、隔離級(jí)別:

      針對(duì)讀取數(shù)據(jù)時(shí)可能產(chǎn)生的不一致現(xiàn)象,在SQL92標(biāo)準(zhǔn)中定義了4個(gè)事務(wù)的隔離級(jí)別:

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

      Oracle默認(rèn)的隔離級(jí)別是read committed。

      Oracle支持SQL92標(biāo)準(zhǔn)的READ_COMMITED、SERIALIZABLE,自身特有的Read only和Read write隔離級(jí)別。

      • Read only:事務(wù)中不能有任何修改數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作語(yǔ)句,是Serializable的一個(gè)子集。
      • Read write:它是默認(rèn)設(shè)置,該選項(xiàng)表示在事務(wù)中可以有訪問語(yǔ)句、修改語(yǔ)句,但不經(jīng)常使用。

      1、設(shè)置隔離級(jí)別

      設(shè)置一個(gè)事務(wù)的隔離級(jí)別:

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

      注意:這些語(yǔ)句是互斥的,不能同時(shí)設(shè)置兩個(gè)或兩個(gè)以上的選項(xiàng)。

      設(shè)置單個(gè)會(huì)話的隔離級(jí)別:

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

      三、數(shù)據(jù)庫(kù)鎖:

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

      • 排它鎖:(X鎖,eXclusive Locks)
        當(dāng)有DML語(yǔ)句執(zhí)行的時(shí)候,設(shè)計(jì)的行都會(huì)加上排它鎖,其他事物不能進(jìn)行讀取修改。
      • 共享鎖:(S鎖,Shared Locks)
        加了共享鎖的數(shù)據(jù),可以被其他事物讀取,但不能修改。如select語(yǔ)句。

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

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

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

      1、Oracle中的鎖

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

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

      lock table in share mode

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

      lock table in exclusive mode

      (3)行級(jí)共享鎖(RS鎖)
      通常是通過語(yǔ)句添加的,同時(shí)該方法也是我們用來(lái)手工鎖定某些記錄的主要方法。比如,當(dāng)我們?cè)诓樵兡承┯涗浀倪^程中,不希望其他用戶對(duì)查詢的記錄進(jìn)行更新操作,則可以發(fā)出這樣的語(yǔ)句。當(dāng)數(shù)據(jù)使用完畢以后,直接發(fā)出rollback命令將鎖定解除。當(dāng)表上添加了RS鎖定以后,不允許其他事務(wù)對(duì)相同的表添加排他鎖,但是允許其他的事務(wù)通過DML語(yǔ)句或lock命令鎖定相同表里的其他數(shù)據(jù)行。

      select … from for update

      (4)行級(jí)排他鎖(RX鎖)
      當(dāng)進(jìn)行DML操作時(shí)會(huì)自動(dòng)在被更新的表上添加RX鎖,或者也可以通過執(zhí)行l(wèi)ock命令顯式的在表上添加RX鎖。在該鎖定模式下,允許其他的事務(wù)通過DML語(yǔ)句修改相同表里的其他數(shù)據(jù)行,或通過lock命令對(duì)相同表添加RX鎖定,但是不允許其他事務(wù)對(duì)相同的表添加排他鎖(X鎖)。

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

      lock table in share row exclusive mode

      上述幾種鎖模式中,RS鎖是限制最少的鎖,X鎖是限制最多的鎖。當(dāng)程序?qū)λ龅男薷倪M(jìn)行提交(Commit)或回滾(Rollback)后,鎖住的資源便會(huì)得到釋放,從而允許其他用戶進(jìn)行操作。如果兩個(gè)事務(wù),分別鎖定一部分?jǐn)?shù)據(jù),而都在等待對(duì)方釋放鎖才能完成事務(wù)操作,這種情況下就會(huì)發(fā)生死鎖。

      下圖列出產(chǎn)生鎖定模式的SQL語(yǔ)句:

      四、事務(wù)組成:

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

      五、事務(wù)的分類:

      1、顯式事務(wù):

      • 顯式的調(diào)用DCL。
      • 只有用到COMMIT以后才會(huì)真正寫入數(shù)據(jù)庫(kù),也持久化了。

      2、隱式事務(wù):

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

      六、事務(wù)控制命令

      1、提交事務(wù)

      在執(zhí)行使用COMMIT語(yǔ)句可以提交事務(wù),當(dāng)執(zhí)行了COMMIT語(yǔ)句后,會(huì)確認(rèn)事務(wù)的變化,結(jié)束事務(wù),刪除保存點(diǎn),釋放鎖。當(dāng)使用COMMIT語(yǔ)句結(jié)束事務(wù)之后,其他會(huì)話將可以查看到事務(wù)變化后的新數(shù)據(jù)。

      2、回滾事務(wù)

      保存點(diǎn)(savepoint):是事務(wù)中的一點(diǎn),用于取消部分事務(wù),當(dāng)結(jié)束事務(wù)時(shí),會(huì)自動(dòng)的刪除該事務(wù)所定義的所有保存點(diǎn)。當(dāng)執(zhí)行ROLLBACK時(shí),通過指定保存點(diǎn)可以回退到指定的點(diǎn)。

      設(shè)置保存點(diǎn):

      Savepoint a;

      刪除保存點(diǎn):

      Release Savepoint a;

      回滾部分事務(wù):

      Rollback To a;

      回滾全部事務(wù):

      Rollback;

      七、示例

      銀行轉(zhuǎn)帳的例子是最經(jīng)典的事務(wù)示例:

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

      到此這篇關(guān)于Oracle事務(wù)(transaction)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

      標(biāo)簽: Oracle
      相關(guān)文章:
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      国产日韩一区二区三区在线播放| 亚洲精品黄色| 国产精品第十页| 久久xxxx精品视频| 在线国产一区| 一本一本久久| 丝袜美腿高跟呻吟高潮一区| 欧美精品一二| 国产一区成人| 一区二区三区午夜视频| 亚洲人成毛片在线播放女女| 亚洲我射av| 欧美视频久久| 麻豆精品久久| sm捆绑调教国产免费网站在线观看| 精品理论电影在线| 青青久久av| 电影91久久久| 久久只有精品| 高清久久一区| 在线中文字幕播放| 亚洲a在线视频| 香蕉久久夜色精品国产| 婷婷亚洲五月色综合| 老司机精品久久| 欧美日韩一区二区三区不卡视频 | 麻豆成人在线观看| 中文字幕成在线观看| 欧美一级精品| 亚洲综合色婷婷在线观看| 亚洲性视频在线| 国产精品hd| 999国产精品999久久久久久| 亚洲在线观看| 欧美日韩一区二区国产| www.51av欧美视频| 久久福利影视| 国产精品久久国产愉拍| 国产传媒av在线| 免费看欧美美女黄的网站| 国产欧美日韩精品一区二区免费| 国产一区调教| 西西人体一区二区| 国产日产精品_国产精品毛片 | 免费欧美在线视频| 欧美a一区二区| 精品一区免费| 国产精品一区二区精品视频观看| 高清精品久久| 国产精品婷婷| 国产精品久久久久久久久久久久久久久| 黄色在线网站噜噜噜| 香蕉视频成人在线观看| 国产精品对白久久久久粗| 136国产福利精品导航网址| 亚洲无线观看| 国产精品久久久久久久免费观看| 一区二区视频欧美| 国产乱码精品一区二区三区亚洲人| а√天堂中文在线资源8| 蜜桃一区二区三区在线观看| 动漫av一区| 日韩影院在线观看| 久久久久久色| 国产一二在线播放| 蜜桃视频在线观看一区| 综合日韩av| 欧美一区久久| 午夜久久久久| 国产精品成久久久久| 日韩中文字幕| 欧美一级精品| 国产精品麻豆成人av电影艾秋| 伊人久久成人| 成人在线免费观看91| 中文不卡在线| 成人午夜精品| 国产精久久久| 只有精品亚洲| 久久91导航| 久久亚洲道色| 日韩精品免费视频人成| 激情综合网站| 四虎4545www国产精品| 国产精品v亚洲精品v日韩精品| 五月精品视频| 日韩在线中文| 精品国产乱码久久久久久1区2匹| 综合色一区二区| 亚洲精品网址| 久久久成人网| 老牛影视精品| 麻豆一区二区三区| 日韩高清一级| 黄色在线一区| 久久久噜噜噜| 国产精品99在线观看| 国产精品美女久久久久久不卡| 亚洲小说春色综合另类电影| 激情久久婷婷| 正在播放日韩精品| 精品久久中文| 国产劲爆久久| 国产午夜一区| 欧美日本久久| 日本成人在线不卡视频| 亚洲在线电影| 久久香蕉精品| 香蕉成人久久| 婷婷亚洲五月色综合| 久久中文字幕av| 99国产精品一区二区| 在线亚洲人成| 97精品国产| www.九色在线| 日本高清不卡一区二区三区视频| 国产精品99在线观看| 精品国产一区二区三区av片| 国产欧美二区| 欧美激情99| 国产在线一区不卡| 成人污污视频| 色婷婷色综合| 国产一区二区三区不卡av| 国产激情久久| 久久99国产精品视频| 精品免费av| 亚洲日本网址| 五月天久久网站| 水野朝阳av一区二区三区| 99视频+国产日韩欧美| 亚洲一区免费| 综合激情在线| 91精品丝袜国产高跟在线| 欧美日韩18| 免费精品一区| 国产成人免费视频网站视频社区| 日产精品一区二区| 日韩av首页| 欧美一区二区三区高清视频| 精品一区亚洲| 亚洲毛片在线| 国产欧美日韩视频在线| 精品视频在线你懂得| 日本一区二区免费高清| 久久久久99| 亚洲欧美视频| 欧美亚洲人成在线| 精品一区电影| 久久精品国产亚洲夜色av网站| 亚洲电影在线一区二区三区| 石原莉奈一区二区三区在线观看| 日本国产一区| 精品三级久久久| 精品国模一区二区三区| 国产韩日影视精品| 日韩一区精品字幕| 7777精品| 国产va在线视频| 国产精品嫩草99av在线| 日韩av不卡一区二区| 久久精品九色| 国产字幕视频一区二区| 一区二区精品| 精品中文在线| 亚洲一级影院| 日韩三级视频| 精品国产美女a久久9999| 欧美成人午夜| 视频一区中文字幕精品 | 日本精品国产| 国产欧洲在线| 三级在线观看一区二区 | 国产日韩欧美在线播放不卡| 亚洲黄色免费看| 久久亚洲不卡| 久久精品国内一区二区三区| 国产综合激情| 久久黄色影视| 久久久国产亚洲精品| 日韩美女精品| 天堂av在线| 男女性色大片免费观看一区二区| 欧美国产日本| 中文在线一区| 久久久久久久久成人| 国产综合精品一区| 久久国产人妖系列| 婷婷国产精品| 国产欧美日韩精品一区二区免费| 久久国产成人午夜av影院宅| 欧美在线看片| 国产亚洲在线观看| 国产精品久久观看| 亚洲日产国产精品| 日韩中文欧美| 91大神在线观看线路一区| 日韩欧美午夜| 欧美日韩午夜电影网| 午夜精品影院|