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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 826309
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    一、           數據庫事務概念

    數據庫事務的特征: ACID

    Atomic (原子性)、 Consistency (一致性)、 Isolation (隔離性)和 Durability (持久性)。 DBMS 用日志來保證數據的原子性、一致性和持久性;用鎖的機制來保證數據的隔離性。

    二、           事務的邊界

    數據庫支持 2 種事務模式:自動提交和手動提交。

    JDBC API 的事務邊界

    try
    {
        Connection conn 
    =  java.sql.DriverManager,.getConnection(dbUrl,dbUser,dbPwd);
        conn.setAutoCommit(
    false );  // 設置成手動模式
        stmt  =  conn.createStatement();
        stmt.executeUpdate(
    " . " );  // 數據庫更新1
        stmt.executeUpdate( " . " );  // 數據庫更新2
        
        conn.commit();
    }

    catch (Exception e)
    {
        conn.rollback();
    }

    finally
    {
        stmt.close();
        conn.close();
    }

    Hibernate API 聲明事務邊界

    Session session  =  factory.openSession();
    Transaction tx;
    try  
    {
        tx 
    =  session.beginTransaction();  // 開始事務
        
    // 執行操作
        。。。。。
        
        tx.commit();
    }

    catch  (Exception e)
    {
        
    if  (tx != null )
        
    {
            tx.rollback();
        }

    }

    finally
    {
        session.close();
    }

    注:一個 session 可以對應多個事務,但是推薦的做法是一個 session 對應一個事務。

    三、            多事務的并發問題

    當多個事務同時訪問相同的數據的時候,程序如果沒有采取適當的隔離措施,就會發生數據庫的并發問題。常見的并發問題有:

    第一類丟失更新:撤消事務的時候,把其他的事務已經提交的數據給覆蓋了;

    臟讀;讀了沒有提交的數據;

    虛讀:一個事務讀到另外一個事務已經提交的新插入的數據;

    不可重復讀:一個事務讀到另外一個事務已經提交的更新的數據;

    第二類丟失更新:一個事務覆蓋另外一個事務已經提交的更新數據。 
    四、          

    一般地,大型的 DBMS 都會自動的管理鎖定機制,但是在對數據的安全性、完整性和一致性有特殊要求的地方,可以由事務本身來管理瑣的機制。

    有一點要關注的是:鎖的粒度越大,隔離性越好,并發性越差。

    按照鎖的程度來分有:

    共享鎖:用讀操作,非獨占的,其他事務可以讀,但是不能更新,并發性好;

    獨占鎖:用與 insert update delete 等語句,其他事務不能讀,也不能改,并發性差;

    更新鎖:執行 update 的時候,加鎖。

    死瑣:多是事務分別鎖定了一個資源,又請求鎖定對方已經鎖定的資源,就造成了請求環。

    降低死鎖的最好辦法是使用短事務。

    五、            數據庫的事務隔離級別

    數據庫提供 4 種事務隔離級別:

    Serializable :串行化;(隔離級別最高) 1

    Repeatable Read :可重復讀; 2

    Read Commited :讀已提交數據; 4

    Read Uncommited :讀未提交數據;(隔離級別最低) 8

    Hiberate 中的隔離級別的設置

    Hibernate 的配置文件中 hibernate.connection.isolation=2

    六、            悲觀鎖和樂觀瑣

    從應用程序的角度來看,鎖分為悲觀鎖和樂觀鎖。

    悲觀鎖:顯示的為程序加鎖,但是降低并發性。

    Select ……. For update;

    Hibernate 中的代碼

    Session.get(Account.class,net Long(1),LockMode.UPGRADE) // 程序采用悲觀鎖

    樂觀鎖:依靠 DBMS 來管理鎖,程序依靠版本控制來避免并發問題。

    在對象 - 關系映射的文件中,用 <version> 或者 <timestamp> 可以管理并發。樂觀瑣比悲觀瑣有更好的并發性,優先考慮樂觀瑣。  

    http://www.tkk7.com/sodmewuhan/archive/2006/04/22/42505.html


    posted on 2007-09-16 14:50 Ke 閱讀(1317) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 国产黄色片免费看| 思思re热免费精品视频66| 亚洲国产精品自在线一区二区 | jizz日本免费| 亚洲精品视频免费在线观看| 特级淫片国产免费高清视频| 久草免费福利在线| 亚洲一区中文字幕在线观看| 亚洲免费无码在线| 性做久久久久久久免费看| 免费人成视频在线观看免费| 亚洲国产精品综合久久2007| 亚洲国产精品日韩专区AV| 亚洲视频免费播放| 一区二区视频在线免费观看| 亚洲AV无码乱码麻豆精品国产| 亚洲精品无码日韩国产不卡?V| 日本片免费观看一区二区| 国产vA免费精品高清在线观看| 色婷五月综激情亚洲综合| 亚洲宅男天堂在线观看无病毒| 免费的一级黄色片| 最近在线2018视频免费观看| a一级毛片免费高清在线| 亚洲熟妇无码AV| 久久亚洲精品无码VA大香大香| 亚洲AV无码成人精品区大在线| 四虎1515hh永久久免费| 久久精品无码免费不卡| 爱爱帝国亚洲一区二区三区| 亚洲成av人片在线看片| 久久夜色精品国产亚洲| 免费大黄网站在线看| 最近2019中文字幕mv免费看| 久久99精品国产免费观看| a级毛片免费观看网站| 亚洲成a∨人片在无码2023| 亚洲婷婷在线视频| 久久久无码精品亚洲日韩京东传媒| 精品国产人成亚洲区| 国产jizzjizz免费视频|