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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    1、原子性(Atomicity)

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

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

    2、一致性(Consistency)

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

    例如:A、B帳戶的總金額在轉賬前和轉帳后必須一致,其中的不一致必須是短暫的,在事務提交前才會出現的。

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

    3、隔離性(Isolation)

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

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

    4、持久性(Durability)

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

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

    事務的控制

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

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

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

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

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

    RELEASE SAVEPOINT---釋放存儲點

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

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

    1、設置事務屬性

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

    * 指定事務的隔離層

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

    * 命名事務

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

    SET TRANSACTION ISOLATION LEVEL READ COMMITED

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

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

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

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

    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,但是系統可以隱式自動完成這一操作。

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

    ALTER TABLE T1 ADD CONSTRAINT <constraint_name> DEFERRABLE INITIALLY IMMEDIATE

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

    3、存儲點

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

    創建格式如下:

    SAVEPOINT <savepoint_name>

    使用格式如下:

    ROLLBACK TO [SAVEPOINT] <savepoint_name>

    4、結束事務

    以下操作為將事務結束:

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

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

    * 執行DDL時,結束默認COMMIT

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

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

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

    posted on 2012-10-21 16:37 abin 閱讀(3231) 評論(0)  編輯  收藏 所屬分類: oracle
    主站蜘蛛池模板: 亚洲综合图片小说区热久久| 最近中文字幕免费2019| 国产精品高清视亚洲精品| 亚洲精品国产字幕久久不卡| 国产亚洲精品免费| 成熟女人牲交片免费观看视频| 一级毛片免费观看不卡视频| ssswww日本免费网站片| 香蕉视频亚洲一级| 亚洲国产乱码最新视频| 亚洲成人福利在线| 亚洲av丰满熟妇在线播放| 久久影视综合亚洲| 又粗又硬免费毛片| 国产精品麻豆免费版| 女人18毛片a级毛片免费| 无码国产精品一区二区免费式直播 | 亚洲一区二区三区久久| 亚洲午夜久久久精品影院| 国产精品亚洲A∨天堂不卡| 亚洲黄黄黄网站在线观看| 四虎成人精品在永久免费| 精品免费国产一区二区| 成人人观看的免费毛片| 国产精品69白浆在线观看免费| 亚洲大片免费观看| 18女人毛片水真多免费| 精品无码无人网站免费视频| 一级毛片在线观看免费| 7m凹凸精品分类大全免费| 三年片在线观看免费大全电影 | 国产成人免费网站在线观看 | 亚洲国产欧美一区二区三区| 亚洲国产最大av| 亚洲一级特黄特黄的大片| 亚洲日韩精品国产3区| 亚洲中文字幕无码av| 亚洲精品自偷自拍无码| 在线观看亚洲专区| 免费一级特黄特色大片| 一个人免费观看视频在线中文 |