<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    1、原子性(Atomicity)

    事務的原子性是指事務中包含的所有操作要么都做,要么都不做,保證數據庫是一致的。

    例如:A帳戶向B帳戶劃賬1000,則先將A減少1000,再將B增加1000,這兩個動作要么都提交,要么都回退,不可能發(fā)生一個有效、一個無效的情況。

    2、一致性(Consistency)

    一致性是指數據庫在事務操作前和事務處理后,其中的數據必須都滿足業(yè)務規(guī)則約束。

    例如:AB帳戶的總金額在轉賬前和轉帳后必須一致,其中的不一致必須是短暫的,在事務提交前才會出現(xiàn)的。

    再如:約定B帳戶不能多于1000元,則A轉出1000成功,B轉入1000失敗,最終由原子性得到——整個事務回滾

    3、隔離性(Isolation)

    隔離性是數據庫允許多個并發(fā)事務同時對齊數據進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數據的不一致。

    例如:在AB之間轉帳時,C同時向A轉帳,若同時進行則AB之間的一致性不能得到滿足。所以在AB事務執(zhí)行過程中,其他事務不能訪問(修改)當前相關的數值。

    4、持久性(Durability)

    持久性表示為:事務處理結束后,對數據的修改就是永久的,即便系統(tǒng)故障也不會丟失。

    在提交之前如果系統(tǒng)故障,則所有信息全部丟失。提交之后數據存放在磁盤中,是永久性的。

    事務的控制

    事務的開始是隱形聲明的,不用也沒有語句可以進行操作,默認從對數據的修改開始就開始了當前事務。

    對數據庫的設置主要有一下語句:

    SET TRANSACTION-----設置事務屬性

    SET CONSTRANS-------設置約束模式

    SAVEPOINT-----------建立存儲點

    RELEASE SAVEPOINT---釋放存儲點

    ROLLBACK------------回滾

    COMMIT--------------提交

    1、設置事務屬性

    設置事務屬性主要可以用來完成以下工作:

    * 指定事務的隔離層

    * 規(guī)定回滾事務時所使用的存儲空間

    * 命名事務

    注:SET TRANSACTION必須是事務的第一個語句。并在事務終止后自動失效。

    SET TRANSACTION ISOLATION LEVEL READ COMMITED

    A事務設置為READ COMMITED,該開始后B事務修改了數據,此時A無法得到新數據,B提交之后,A可以查詢到更新數據。 A不可能錯讀,但可能發(fā)生假讀和非重復讀。

    在需要并發(fā)數很大時應該使用READ COMMITED,對于多用戶并發(fā)的性能和響應速度都比較好。

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

    事務和事務之間完全隔離開,事務以串行的方式執(zhí)行。不是說必須等一個結束,而是事務一旦開始,在結束之前查詢到的數據永遠是開始時刻的數據。由于留存的模式會比較多,所以會消耗一定的系統(tǒng)資源。

    SET TRANSACTION READ ONLY

    當前事務不能有任何修改數據的操作,READ ONLYSERIALIZABLE的一個子集,基本上屬于最高的安全級。

    SET TRANSACTION READ WRITE

    READ的基礎上增加WRITE權限,不常用

    2、設置約束延期性

    在操作過程中可能需要違反約束向表中插入重復的數據,其實需要設置約束延期性。

    設置格式如下:

    SET CONSTRAINT ALL | <constraint_name>

    DEFERRED | IMMEDIATE

    可以選擇要延期的約束名,也可以使用ALL關鍵字延期所有的約束

    DEFERRED表示延期,IMMEDIATE表示應用

    注:理論上在COMMIT前需要設置回IMMEDIATE,但是系統(tǒng)可以隱式自動完成這一操作。

    注意:要使用延遲的約束,必須在創(chuàng)建時就進行說明:

    ALTER TABLE T1 ADD CONSTRAINT <constraint_name> DEFERRABLE INITIALLY IMMEDIATE

    后面的DEFERRABLE 指名可以使用延遲,INITIALLY 設定了初始值

    3、存儲點

    由于事務太大,一次回滾會對系統(tǒng)造成很大的壓力。而且有時候在某一段特定的代碼附近會特別發(fā)生錯誤而回滾。這時就需要在希望的地方設置一個存儲點,可以顯示得操作數據在發(fā)生錯誤時回滾到指定的存儲點,而節(jié)省不必要的開銷。

    創(chuàng)建格式如下:

    SAVEPOINT <savepoint_name>

    使用格式如下:

    ROLLBACK TO [SAVEPOINT] <savepoint_name>

    4、結束事務

    以下操作為將事務結束:

    * 使用COMMIT提交事務,數據被永久保存

    * 使用ROLLBACK回滾事務(不包括回滾到存儲點)

    * 執(zhí)行DDL時,結束默認COMMIT

    * 用戶斷開連接,此時事務自動COMMIT

    * 進程意外中止,此時事務自動ROLLBACK

    注:事務COMMIT時會生成一個唯一的系統(tǒng)變化號(SCN)保存到事務表

    posted on 2012-10-21 16:37 abin 閱讀(3232) 評論(0)  編輯  收藏 所屬分類: oracle
    主站蜘蛛池模板: 国产精品无码素人福利免费| 久久青草免费91线频观看站街| 永久免费毛片在线播放| 水蜜桃亚洲一二三四在线| 免费观看一区二区三区| 亚洲线精品一区二区三区| 中文字幕免费观看视频| 亚洲国产精品VA在线看黑人| 免费视频精品一区二区三区 | 18国产精品白浆在线观看免费| 国产亚洲成av人片在线观看| 一个人免费视频观看在线www| 国产AV无码专区亚洲A∨毛片| 日韩精品极品视频在线观看免费| 亚洲精品免费视频| 国产三级在线观看免费| 亚洲欧美日本韩国| 亚洲国产精品自产在线播放| 久久www免费人成看国产片| 亚洲人成亚洲精品| 女性无套免费网站在线看| 337P日本欧洲亚洲大胆艺术图| 亚洲国产日韩在线观频| 免费看男人j放进女人j免费看| 亚洲人成影院77777| 免费精品国产自产拍观看| 两个人看的www免费视频中文| 亚洲人成网站影音先锋播放| 成人毛片免费观看视频大全| 麻豆一区二区三区蜜桃免费| 亚洲va中文字幕无码久久| 91香蕉视频免费| 精品无码国产污污污免费网站国产| 亚洲黄色在线电影| 国产免费av片在线无码免费看| 国产猛男猛女超爽免费视频| 亚洲а∨天堂久久精品9966| 在线播放亚洲第一字幕| 99re热免费精品视频观看| 狠狠躁狠狠爱免费视频无码| 亚洲18在线天美|