當(dāng)userA發(fā)出 select * from 表名 for update of 字段 時(shí)
這是紀(jì)錄被鎖住等待更新
當(dāng)userB此時(shí)也發(fā)出select * from 表名 for update of 字段 時(shí)
并且for update of 的紀(jì)錄已經(jīng)被userA鎖定
這是userB只能等待userA提交后才能獲取到userA被占用的紀(jì)錄
如果userA不提交userB就會(huì)無限期的等待
解決方法
userB執(zhí)行select * from 表名 for update of 字段 no wait 10;
這時(shí)雖然紀(jì)錄被userA鎖定但是userB會(huì)等待10秒如果10秒內(nèi)userA釋放
了紀(jì)錄,則userB獲取該鎖,如果10秒后userA未釋放鎖,則userB返回
錯(cuò)誤消息
ora-30006:資源已被占用;執(zhí)行此操作時(shí)出現(xiàn)wait超時(shí)
--------------------------------------------------------------------
userA鎖住一條紀(jì)錄
userB鎖住一條紀(jì)錄
userA請求鎖住userB正在鎖住的紀(jì)錄
而同時(shí)userB請求鎖住userA正在鎖住的紀(jì)錄
這時(shí)候就會(huì)產(chǎn)生死鎖
--------------------------------------------------------------------
如果在事務(wù)中執(zhí)行了一條不滿足條件的update語句,則執(zhí)行全表掃描,把行級(jí)鎖上升為表級(jí)鎖,多個(gè)這樣的事務(wù)執(zhí)行后,就很容易產(chǎn)生死鎖。
版權(quán)歸原作者和各發(fā)布網(wǎng)站所有,此文章僅供學(xué)習(xí)參考之用
天天學(xué)習(xí),好好向上——