- 在ORACLE世界裡,針對資料做新增,修改,刪除都會產生鎖定,唯一查詢時不會產生鎖定,而FOR UPDATE的用處就是加入鎖定在查詢上
如何解除鎖定
- 每次的交易都會有結束的時間點,只要下rollback或是commit即可解除鎖定
FOR UPDATE [column [,column...]]
[NOWAIT | WAIT n | SKIP LOCKED]
column:欄位名稱
n:要等幾秒,才能再度使用列的資料
NOWAIT:馬上傳回控制值
WAIT:等到n秒,回傳列資料
SKIP LOCKED:略過已鎖定的列使用方式
- SQL語法示範
鎖定emp表格的salary資料,employee_id為100
select salary from emp where employee_id=100 for update;
如果employee_id為100本身就有鎖定,就不等待,如果沒有鎖就鎖定employee_id為100
select salary from emp where employee_id=100 for update nowait;
如果employee_id為100本身就有鎖定,我查詢這筆資料等5秒,時間一到就放棄鎖定這筆資料,除非對方下rollback或commit
select salary from emp where employee_id=100 for update wait 5;
如果employee_id為100本身就有鎖定,查詢資料時略過已鎖定的列
select salary from emp where employee_id=100 for update skip locked;