Oracle鎖相關(LOCK TABLE)


目錄

一、基本語法

事務鎖語法

2. lockmode

        Oracle支持的鎖模式有ROW SHAREROW EXCLUSIVEROW UPDATESHARE

2.1 EXLUSIVE排他鎖

        表級鎖:當一個Session獲取到了排他鎖以后,其他用戶只能進行查詢操作,一般對一張表進行drop操作時獲得該鎖。

2.2 SHARE共享鎖

        表級鎖:SHARE模式允許並發查詢,但是一個Session如果獲得了共享鎖,那么就不能對該表進行update操作。

2.3 ROW SHARE行共享模式

        行級鎖:允許並發訪問,但是不允許用戶獨占式訪問。這個鎖模式等價於WITH SHARE UPDATE(以前老版本的寫法)

2.4 ROW EXCLUSIVE行排他模式

        行級鎖:ROW EXCLUSIVE模式一般來說用戶不會手動進行設置,在一個Session會話對數據庫進行insert、update以及delete操作時,該用戶就會自動的獲取到這個ROW EXCLUSIVE鎖。在ROW EXCLUSIVE和ROW SHARE模式一樣,但是如果一個Session獲得了ROW EXCLUSIVE鎖,那么另外的Session就不能進行ROW EXCLUSIVE鎖定,也不能對該表進行SHARE鎖定。

2.4 SHARE ROW EXLUSIVE共享行排他

        行級鎖:如果一個Session獲取了SHARE ROW EXLUSIVE鎖,該用戶以及其他用戶可以對整張表進行查詢,但是,不允許其他用戶對該表進行SHARE鎖定或者更新表的數據。

2.5 小結

         如果一個table 被一個session鎖定,無論什么鎖定,另外的session就不能獲得對於該表exclusive的鎖定,也就是說不能刪除該表,其實很容易相同,別人在用那個表,你去把表給刪除了,肯定是不允許的.

         如果能夠對某個表進行row exclusive 鎖定,那么肯定可以執行dml操作。

        可以這樣理解share鎖,顧名思義,共享鎖是用來共享的,既然是共享,所以其他用戶只能查看,不能更改。

         可以這樣理解exclusive鎖,顧名思義,排它鎖就是獨享的,其他用戶只能查看,不能修改。

2.6 for update 語句與鎖模式

begin;

select * from tickets from update of tnum
update tickets set tnum = tnum - 100 where tno = 1;

commit;

        如果,在for update后面沒有寫of tnum,那么 這個Session就是做了一個表獨占的操作;如果加了of tum,指定了一張表中的一列數據,並且,使用where子句進行刪選,這個Session就是做了一個行獨占的操作。為了保證sql語句的執行性能,在寫sql語句時,應該盡量的做到行鎖定的模式,否則會影響到其他人的操作。

問題:

        在設置事務的隔離級別后,進行不加for update的查詢操作,MySQL的優化器是否會自動進入到行級鎖的模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM