Oracle學習筆記七 鎖

鎖的概念

  • 鎖是數據庫用來控制共享資源併發訪問的機制。
  • 鎖用於保護正在被修改的數據
  • 直到提交或回滾了事務以後,其餘用戶才能夠更新數據
  • 對數據的併發控制,保證一致性、完整性。

            

 

並行性 -容許多個用戶訪問同一數據
一致性 - 一次只容許一個用戶修改數據
完整性 - 爲全部用戶提供正確的數據。若是一個用戶進行了修改並保存,所作的修改將反映給全部用戶
 

鎖的類型

 
行級鎖:對操做的數據行進行鎖定,防止其餘用戶(鏈接)進行修改。
表級鎖:對整個表進行鎖定。
 

行級鎖

對正在被修改的行進行鎖定。其餘用戶能夠訪問除被鎖定的行之外的行。
 
 
行級鎖是一種排他鎖,防止其餘事務修改此行。
在使用如下語句時,Oracle會自動應用行級鎖:
  1.INSERT
  2.UPDATE
  3.DELETE
  4.SELECT … FOR UPDATE
SELECT … FOR UPDATE語句容許用戶一次鎖定多條記錄進行更新, 鎖定的數據自能經過commit或者rollback進行提交或回滾後解鎖
 
SELECT … FOR UPDATE語法:

 SELECT … FOR UPDATE [OF columns]
[WAIT n | NOWAIT];數據庫

SELECT * FROM order_master WHERE vencode='V002'
           FOR UPDATE OF odate, del_date;
UPDATE order_master SET del_date='28-8月-05'
           WHERE vencode=’V002’;
COMMIT;

 

 

SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE WAIT 5;

 

 

SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE NOWAIT;

 

 

表級鎖

表級鎖鎖定整個表,限制其餘用戶對錶的訪問。
 
 

使用表級鎖使用命令顯示地鎖定表,應用表級鎖的語法是:併發

 LOCK TABLE table_name IN mode MODE;spa

 

 

 

  • 行共享:row share,禁止排他鎖(不容許排他鎖再鎖定),容許其餘的用戶鎖定表數據行共享使用。

 

Lock table emp in row share mode;

 

 

  • 行排他:exclusive 禁止使用排他鎖和共享鎖
Lock table emp in row exclusive mode;

 

  • 共享鎖:share,能夠多個用戶同時鎖定一個表,可是隻容許用戶查詢和不能修改數據

 

    • 1.鎖定表,僅容許其餘用戶查詢表中的行
    • 2.禁止其餘用戶插入、更新和刪除行
    • 3.多個用戶能夠同時在同一個表上應用此鎖

       

  • 共享行排他:share row exclusive 比共享鎖更多的限制,禁止使用共享鎖及更高的鎖
  • 排他鎖: exclusive,禁止其餘的用戶再鎖定 限制最強的表鎖,僅容許其餘用戶查詢該表的行。禁止修改和鎖定表

死鎖

當兩個事務相互等待對方釋放資源時,就會造成死鎖,Oracle會自動檢測死鎖,並經過結束其中的一個事務來解決死鎖
例:
--第一步:用戶1
update emp2 set sal=sal+25 where empno=7782;
--第二步:用戶2
update emp2 set sal=sal+25 where empno=7566;
--第三步:用戶1
update emp2 set sal=sal+25 where empno=7566;
--第四步:用戶2
update emp2 set sal=sal+25 where empno=7782;
--產生死鎖!!Oracle 自動解鎖!
相關文章
相關標籤/搜索