paulwong

          數(shù)據(jù)庫的鎖機(jī)制

          在進(jìn)行SELECT操作時(shí),通常接下來會進(jìn)行UPADTE的操作,如果希望COMMIT前,所SELECT的數(shù)據(jù)不會被其他線程SELECT出來,則兩個(gè)線程都加FOR UPDATE/FOR UPDATE NOWAIT關(guān)鍵字,這樣數(shù)據(jù)庫就會鎖定這些記錄,加了FOR UPDATE的會進(jìn)行等待,直到上一線程結(jié)束,加了FOR UPDATE NOWAIT的線程則直接拋出異常,這種機(jī)制稱為數(shù)據(jù)庫的鎖機(jī)制。

          HIBERNATE中的實(shí)現(xiàn):

          LockMode.NONE :有緩存用緩存,沒緩存則從數(shù)據(jù)庫讀 
          LockMode.READ :直接從數(shù)據(jù)庫讀,不使用緩存數(shù)據(jù) 
          LockMode.WRITE :在insert update數(shù)據(jù)的時(shí)候,HIBERNATE內(nèi)部使用的。 
          以上3種均為HIBERNATE級別的鎖,也就是緩存級別的鎖。 

          下面2種為數(shù)據(jù)庫級別的鎖: 
          LockMode.UPGRADE:相當(dāng)于SQL語句select for update,被select的數(shù)據(jù)都被數(shù)據(jù)庫鎖住了,不能被其他事務(wù)修改。 
          LockMode. UPGRADE_NOWAIT :是ORACLE數(shù)據(jù)庫特有的select for update nowait

          posted on 2012-04-19 17:56 paulwong 閱讀(359) 評論(0)  編輯  收藏 所屬分類: HIBERNATE

          主站蜘蛛池模板: 黄骅市| 隆回县| 泗洪县| 嘉峪关市| 新晃| 马龙县| 扎兰屯市| 万山特区| 驻马店市| 名山县| 关岭| 临汾市| 曲松县| 区。| 衡水市| 祁门县| 海盐县| 德州市| 建阳市| 临颍县| 上高县| 海安县| 永清县| 吴堡县| 莫力| 新津县| 永川市| 闵行区| 英吉沙县| 始兴县| 女性| 咸阳市| 萍乡市| 镇远县| 宿迁市| 赤壁市| 延长县| 廊坊市| 讷河市| 兴山县| 茂名市|