paulwong

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

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

          HIBERNATE中的實現(xiàn):

          LockMode.NONE :有緩存用緩存,沒緩存則從數(shù)據(jù)庫讀 
          LockMode.READ :直接從數(shù)據(jù)庫讀,不使用緩存數(shù)據(jù) 
          LockMode.WRITE :在insert update數(shù)據(jù)的時候,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 閱讀(357) 評論(0)  編輯  收藏 所屬分類: HIBERNATE

          主站蜘蛛池模板: 时尚| 吉水县| 齐齐哈尔市| 伊宁县| 德惠市| 喀喇沁旗| 博白县| 武功县| 杨浦区| 玛沁县| 铁力市| 临洮县| 临沧市| 郁南县| 竹溪县| 汨罗市| 安乡县| 上杭县| 连江县| 左权县| 印江| 延津县| 浑源县| 钦州市| 万安县| 玉门市| 武穴市| 福海县| 闸北区| 威远县| 乌拉特前旗| 湾仔区| 大城县| 庆安县| 宁明县| 开江县| 云南省| 措勤县| 江孜县| 沐川县| 阳谷县|