csusky

          常用鏈接

          統計

          最新評論

          數據庫的事務 JDBC

          TRANSACTION_NONE:
            正式地講,TRANSACTION_NONE不是一個有效的事務級別。
            根據java.sql Connection API文件,這個級別表示事務是
            不被支持的,因此理論上說你不能使用TRANSACTION_NONE作
            為一個自變量賦給Connection.setTransactionIsolation()
            方法。事實上,雖然一些數據庫實施了這個事務級別,但是
            Oracle9i卻沒有實施。


           臟讀取(TRANSACTION_READ_UNCOMMITTE):
          (允許的操作       讀-讀  讀-寫 寫-讀     (臟數據,不可重復讀,虛讀) )
             表示,這個事務級別
            允許讀取臟數據,什么是臟數據?就是指還沒有提交的數據.
            因為這個級別,是允許一個事務(A)讀取另一個事務(B)
            還沒有提交的數據.一旦事務B發生異常退出.而修改了的數據
            卻還沒提交,或者新插入的數據和刪除了的數據都還沒有
            提交,導致事務A拿到了一些臟數據,或者錯誤數據;
            因此在這個事務級別里是會發生臟讀,重復讀,錯誤讀取;

           禁止臟讀(TRANSACTION_READ_COMMITTED):
          (允許的操作       讀-讀  讀-寫 (不可重復讀,虛讀))
            在這個級別中,事務A
            只能讀取一些提交的數據,如事務B添加了一條記錄,但是
            如果事務B沒有提交,那么事務A是讀不到的,所以該事務級別,
            把臟讀給屏蔽掉了.---卻允許重復讀取,和錯誤讀取.

            什么是重復讀取呢?譬如,事務A讀取了一個數據,這個數據
            的值為"helloworld",事務A準備利用這個數據來更新一下
            其他數據,但這個時候事務B開始對這個數據進行修改,并且
            提交---"hello 無名氏",由于是已經提交了,所以事務A是可以
            看到這個數據的,當事務A在沒提交事務之前,它想看下數據
            是否正確,這個時候它發現,新讀出的數據已經和原來的數據
            不一樣了(這就是重復讀取);




           允許重復讀取(TRANSACTION_REPEATABLE_READ):
          (允許的操作       讀-讀  讀-寫(僅允許插入,不允許刪除和修改)(虛讀))
            在這個級別中,
            是禁止了臟讀,和取消了不可重復讀取,但是沒有禁止錯誤讀取;
            這個級別的事務比較嚴格,當一個事務A在讀取一個值的時候
            是不允許另一個事務對該值進行修改的;
            為了允許重復讀取,可以選用該級別,因為TRANSACTION_READ_
            COMMITED這個事務級別,是允許重復讀取提交的數據的,如果
            事務A在讀取一個數值的時候,值為"Hello World!",但這個時
            候事務B對"Hello World"值進行修改了,改為"Hello EveryOne"
            然后提交,當事務A再次去讀取這個值的時候,去發現原來讀到
            的值改變了,變成了"Hello EveryOne",為了防止出現這種情況
            可以禁止重復提交,目的是為了重復讀取不會出錯!那么這個
            時候就可以選擇
          TRANSACTION_REPEATABLE_READ這個級別,
            這個級別就是用來禁止重復提交的.
          (實際上是加了行鎖,鎖定了選中的數據,不允許修改,但是允許插入新的數據)
            雖然這個時候是禁止了重復提交,但卻可以添加刪除,
            比如事務A,作了個查詢語句"select * from 無名氏 "; 這個時候是允許事務B做這樣的操作的:
            "insert into 無名氏 values(2,'aaa')"; 這個時候,
            事務A再次做讀取操作的時候,卻發現數據莫名其妙的
            多了一條,這就是所謂的---幻影讀取;




           禁止幻讀(TRANSACTION_SERIALIZABLE):
           事務的最高級別(串行化  操作)事務級別最高,所耗費的性能也越多.
            禁止幻讀禁止了臟讀,禁止了重復提交和幻讀.
            也就是當事務A在按條件查詢的時候,事務A一旦沒有提
            交,任何事務都不能對事務A的資源進行操作--- 保證
            事務A的操作真正的原子性!


           注意:在Oracle中只支持兩種級別:

            TRANSACTION_READ_COMMITTED(默認的級別)(只有提交后
               才可以讀取)而每一個終端進行自己的DML操作 都自動開啟了一個事務

            TRANSACTION_SERIALIZABLE(竄行化操作)

          posted on 2008-03-05 09:34 曉宇 閱讀(328) 評論(0)  編輯  收藏 所屬分類: JAVA基礎

          主站蜘蛛池模板: 屏东县| 晋中市| 长海县| 扎赉特旗| 察隅县| 临安市| 封丘县| 达尔| 镇康县| 承德县| 萨迦县| 沂源县| 眉山市| 都昌县| 新龙县| 新巴尔虎右旗| 铜梁县| 黄骅市| 贺兰县| 阿城市| 项城市| 临高县| 白银市| 金昌市| 恩施市| 通辽市| 张家川| 五家渠市| 盐池县| 黄山市| 鸡西市| 边坝县| 周宁县| 长白| 邓州市| 祁连县| 吉林市| 周至县| 上栗县| 平度市| 新邵县|