您好,登錄后才能下訂單哦!
Oracle 11g-鎖
Target:
1、理解鎖定的概念
2、掌握select for update的使用
3、理解不同鎖定的含義
鎖的概念:
1.鎖是數(shù)據(jù)庫用來控制共享資源并發(fā)訪問的機(jī)制;
2.鎖用于保護(hù)正在被修改的數(shù)據(jù);
3.只是提交commit或者回滾rollback事務(wù)后,其他用戶才可以更新數(shù)據(jù)
鎖的優(yōu)點(diǎn):
1.一致性:一次只允許一個(gè)用戶修改數(shù)據(jù)(delete,update,insert)
2.并行性:允許多個(gè)用戶訪問同一數(shù)據(jù)(select);
3.完整性:為所有的用戶都提供正確的數(shù)據(jù),如果一個(gè)用戶進(jìn)行了修改并且保存,所做的修改將反映給所有的用戶;
鎖的類型:
1.行級鎖:對正在被修改的行進(jìn)行鎖定,其他用戶可以訪問除被鎖定的行以外的行;
2.表級鎖:鎖定整個(gè)表,限制其他用戶對表的訪問。
行級鎖拓展1
1.行級鎖是一種排他鎖,防止其他事務(wù)修改此行
2.在使用以下語句時(shí)
INSERT、UPDATE、DELETE
SELECT … FOR UPDATE【語句允許用戶一次鎖定多條記錄進(jìn)行更新】;
使用COMMIT或ROLLBACK語句釋放鎖;
Oracle會自動應(yīng)用行級鎖,當(dāng)然也有表級鎖了。Select查詢不會加鎖。
行級鎖拓展2: SELECT … FOR UPDATE[of colums][wait n][nowait]
<1>SQL> SELECT * FROM emp WHERE sal=1000 FOR UPDATE;
SQL> UPDATE emp SET sal = 3000 WHERE sal =1000;
SQL> COMMIT;
<2>SQL> SELECT * FROM scott.emp WHERE sal=1000
FOR UPDATE WAIT 5; [等待5秒不能鎖定即跳出]
<3>SQL> SELECT * FROM scott.emp WHERE sal=1000 FOR UPDATE NOWAIT ;
[不等待,若該行已被鎖定,就馬上跳出來]
查看鎖:select * from V$lock;
其中TX表示行級鎖,TM表示表級鎖
表級鎖拓展1:
語法:lock table table_name in [mode] mode
例子:lock table scott.emp in row share mode;
表級鎖拓展2:自上到下,限制越來越強(qiáng)
行共享 (ROW SHARE) – 禁止排他鎖定表【也就是允許其他用戶放exclusive鎖,但用戶可以進(jìn)行增刪改查等操作?!?/span>
行排他(ROW EXCLUSIVE) – 禁止使用排他鎖和共享鎖
共享鎖(SHARE)【與select * from emp for update 類似】 鎖定表,僅允許其他用戶查詢表中的行
禁止其他用戶插入、更新和刪除行
多個(gè)用戶可以同時(shí)在同一個(gè)表上應(yīng)用此鎖
共享行排他(SHARE ROW EXCLUSIVE) – 比共享鎖更多的限制,禁止使用共享鎖及更高的鎖
排他(EXCLUSIVE) – 限制最強(qiáng)的表鎖,僅允許其他用戶查詢該表的行。禁止修改和鎖定表
===》理解共享和排他:
共享:如果設(shè)置了共享鎖,其他用戶還可以加鎖;
排他:如果設(shè)置了排他鎖,其他用戶不可以枷鎖。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。