數據庫鎖機制

我的讀書筆記—Spring

數據庫鎖機制

按鎖定的對象不同,一般可以分爲表鎖定和行鎖定,前者對整個表進行鎖定,後者只對某一行進行鎖定。從併發事務鎖定的關係上看,可以分爲共享鎖定和獨佔鎖定。共享鎖定會防止獨佔鎖定,但是允許其他共享鎖定。而獨佔鎖定既防止其他獨佔鎖定,也防止其他共享鎖定。爲了更改數據,數據庫必須在更改數據的時候施加行獨佔鎖定,INSERET,DELETE ,UPDATE,SELECT FOR UPDATE 語句都會隱式採用必要的行鎖定,下面介紹一下Oracle的常用的5種鎖定。

  • 行共享鎖定:一般通過SELECT FOR UPDATE 語句隱式獲得行共享鎖定,在Oracle中,用戶也可以通過LOCK TABLE IN ROW SHARE MODE語句顯式獲取行共享鎖定。行共享鎖定並不防止對數據的更改,但是可以防止其他會話獲取獨佔鎖定。允許進行多個併發的行共享和行獨佔鎖定,還允許進行數據表的共享或者採用共享行獨佔鎖定

  • 表共享鎖定:通過LOCK TABLE IN SHARE MODE 語句顯式獲得。這種鎖定可以防止其他會話獲取行獨佔鎖定(INSERT,UDPATE,DELETE),或者防止其他表共享行獨佔鎖定或者表獨佔鎖定。他允許在表中擁有多個行共享和表共享鎖定。該鎖定可以讓會話具有對錶事務級一致性訪問,因爲其他會話在用戶提交或者回滾該事務並釋放對該表的鎖定之前不能更改這個被鎖定的表。

  • 表共享行獨佔通過LOCK TABLE IN SHARE ROW EXECLUSIVE MODE 語句顯式獲得。這種鎖定可以防止其他會話獲取一個表共享,行獨佔或者表獨佔鎖定,他允許其他行共享鎖定。這種鎖定類似於表共享鎖定,只是一次只能對一個表放置一個表共享行獨佔鎖定。如果A會話擁有該鎖定,則B會話可以執行SELECT FOR UPDATE 操作,但如果B會話試圖更新選擇的行,則需要等待。

  • 表獨佔 通過LOCK TABLE IN EXECLUSIVE MODE 顯式獲得,這個鎖定放置其他會話對該表的任何其他鎖定。

發佈了45 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章