導讀:
Update語句與鎖
Select…For Update語句的語法與select語句相同,只是在select語句的后面加FOR UPDATE [NOWAIT]子句。
該語句用來鎖定特定的行(如果有where子句,就是滿足where條件的那些行)。當這些行被鎖定后,其他會話可以選擇這些行,但不能更改或刪除這些行,直到該語句的事務被commit語句或rollback語句結束為止。
如圖20.51所示,左上角的會話用Select…For Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以繼續更改該行上的數據。從OEM中的鎖的信息可以看出,Select…For Update語句所加的鎖與update語句所加的鎖相同:一個行級別的EXCLUSIVE鎖(說明多個事務不能同時操作同一行)、一個表級別的ROW EXCLUSIVE鎖。
圖20.51 Select…For Update語句鎖定了符合where條件的行
如圖20.52所示,左上角的會話用Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以用Select…For Update語句繼續鎖定該行。
圖20.52 Select…For Update語句被其他會話阻塞了
如圖20.53所示,左上角的會話用Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以用Select…For Update NOWAIT語句繼續鎖定該行,且會立即返回一個錯誤提示“ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源”,而不需要等待加鎖成功。
圖20.53 如果加鎖不成功,則Select…For Update NOWAIT語句就會立即返回錯誤提示
可以看出,如果僅僅用update語句來更改數據時,可能會因為加不上鎖而沒有響應地、莫名其妙地等待,但如果在此之前,先用Select…For Update NOWAIT語句將要更改的數據試探性地加鎖,就可以通過立即返回的錯誤提示而明白其中的道理,或許這就是For Update和NOWAIT的意義之所在。
本文轉自
http://hi.baidu.com/xu520zl/blog/item/959fb08838e30797a5c272de.html
Update語句與鎖
Select…For Update語句的語法與select語句相同,只是在select語句的后面加FOR UPDATE [NOWAIT]子句。
該語句用來鎖定特定的行(如果有where子句,就是滿足where條件的那些行)。當這些行被鎖定后,其他會話可以選擇這些行,但不能更改或刪除這些行,直到該語句的事務被commit語句或rollback語句結束為止。
如圖20.51所示,左上角的會話用Select…For Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以繼續更改該行上的數據。從OEM中的鎖的信息可以看出,Select…For Update語句所加的鎖與update語句所加的鎖相同:一個行級別的EXCLUSIVE鎖(說明多個事務不能同時操作同一行)、一個表級別的ROW EXCLUSIVE鎖。



圖20.51 Select…For Update語句鎖定了符合where條件的行
如圖20.52所示,左上角的會話用Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以用Select…For Update語句繼續鎖定該行。



圖20.52 Select…For Update語句被其他會話阻塞了
如圖20.53所示,左上角的會話用Update語句鎖定了Department表中DeptNo='01'的行,右上角的會話說明其他會話不可以用Select…For Update NOWAIT語句繼續鎖定該行,且會立即返回一個錯誤提示“ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源”,而不需要等待加鎖成功。



圖20.53 如果加鎖不成功,則Select…For Update NOWAIT語句就會立即返回錯誤提示
可以看出,如果僅僅用update語句來更改數據時,可能會因為加不上鎖而沒有響應地、莫名其妙地等待,但如果在此之前,先用Select…For Update NOWAIT語句將要更改的數據試探性地加鎖,就可以通過立即返回的錯誤提示而明白其中的道理,或許這就是For Update和NOWAIT的意義之所在。
本文轉自
http://hi.baidu.com/xu520zl/blog/item/959fb08838e30797a5c272de.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
