標籤:
鎖的概念
- 鎖是資料庫用來控制共用資源並發訪問的機制。
- 鎖用於保護正在被修改的資料
- 直到提交或復原了事務之後,其他使用者才可以更新資料
- 對資料的並發控制,保證一致性、完整性。
並行性 -允許多個使用者訪問同一資料一致性 - 一次只允許一個使用者修改資料完整性 - 為所有使用者提供正確的資料。如果一個使用者進行了修改並儲存,所做的修改將反映給所有使用者 鎖的類型 行級鎖:對操作的資料行進行鎖定,防止其他使用者(串連)進行修改。表級鎖:對整個表進行鎖定。 行級鎖對正在被修改的行進行鎖定。其他使用者可以訪問除被鎖定的行以外的行。 行級鎖是一種獨佔鎖定,防止其他事務修改此行。在使用以下語句時,Oracle會自動應用行級鎖: 1.INSERT 2.UPDATE 3.DELETE 4.SELECT … FOR UPDATESELECT … 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;
- 行共用: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會自動檢測死結,並通過結束其中的一個事務來解決死結例:
--第一步:使用者1update emp2 set sal=sal+25 where empno=7782;--第二步:使用者2update emp2 set sal=sal+25 where empno=7566;--第三步:使用者1update emp2 set sal=sal+25 where empno=7566;--第四步:使用者2update emp2 set sal=sal+25 where empno=7782;--產生死結!!Oracle 自動解鎖!
Oracle學習筆記七 鎖