鎖:控制共用資源的並發訪問機制,防止衝突發生
能保證資料的一致性,完整性,共用性
--鎖的分類:
1)行級鎖獨佔鎖定)
oracle資料庫中,在使用insert ,update ,delete ,select ...for update的時候,預設已經上鎖
2)表級鎖
--示範:開啟多個視窗類比多個使用者
--USERA:update dept set dname='DDDDD' WHERE deptno=50;並且未提交或者復原之前在另外一個視窗中
--使用 USERB:select * from dept for update wait 5;會在5秒鐘之後告訴我們資源被佔用
USERB:select * from dept for update nowait;--只要得不到資源馬上報錯
--只有其他使用者在進行commit或者rollback的時候才能釋放鎖,同時釋放使用的資源
--表級鎖,限制其他使用者訪問該表
使用命令顯示地鎖定表,應用表級鎖的文法是:
LOCK TABLE <table_name> IN <lock_mode>
MODE [nowait];
--表級鎖的模式
--行共用:row share 允許其他使用者訪問和鎖定該表,但是禁止獨佔鎖定定這個表
lock table dept in row share mode;
--其他使用者能使用行共用鎖定,但是不能使用獨佔鎖定
--lock table dept in exclusive mode;
--其他使用者能夠更新表中資料
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;
--行排他:row exclusive 與行共用模式相同,同時禁止其他使用者在此表上使用共用鎖定。
--使用select…for update會在表上自動應用行獨佔鎖定
lock table dept in row exclusive mode;
--其他使用者不能執行:lock table dept in share mode;
--但是能執行:lock table dept in row share mode;
select * from dept for update nowait;--使用這樣的語句,會在表上面應用行獨佔鎖定
--其他使用者能夠更新表中資料
update dept set dname='DDDDD' WHERE deptno=50;
delete from dept where deptno=50;
--共用:share 只允許其他使用者查詢表中的行,但不允許插入、更新、刪除行,
--多個使用者可以同時在同一個表上應用此鎖
lock table dept in share mode;
--其他使用者能執行:lock table dept in share mode;
--其他使用者不能去執行:update dept set dname='DDDDD' WHERE deptno=50;
--delete from dept where deptno=50;
--共用行排他:share row exclusive執行比共用鎖定更多的限制
lock table dept in share row exclusive mode;
--排他:exclusive 對錶執行最大限制,
--僅允許其他使用者查詢該表的行。禁止修改和鎖定表
lock table dept in exclusive mode;
--死結
USERA:lock table scott.emp in share mode;
USERB:lock table scott.emp in share mode;
USERA:update scott.emp set job='CLERK' where empno=7521;
USERB:update scott.emp set ename='Smith' where empno=7369;
本文出自 “至簡” 部落格,請務必保留此出處http://zhijian.blog.51cto.com/2057586/1298539