FOR UPDATE子句

何謂FOR UPDATE子句
  • 在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;