這裏有兩個表employees(empID int,empName varchar,age int)和salary(salID,empID,...)。DB2事務如何在併發情況下正常工作
insert into employee select ... where not exists (select 1 from employee where empID = :employeeID)
insert into salary ....
- ...
有以上的邏輯和同一員工同時運行2點的工作。
- job1失敗並回滾。
- job1在job1回滾之前回滾並提交之前啓動的job2。
我的問題是:
- 如果作業2順利完成,有多少記錄將被插入到employee表? 1還是0?更準確地說,job2的第1步可以查看job1插入的員工記錄嗎?
- 如果爲0,我如何確保員工被job2插入或不會被job1回滾刪除?
啊,併發性,理智的禍害。結果很大程度上取決於所選的鎖定/隔離級別 - 在「正確」(可能是錯誤的)級別下,子查詢可能會鎖定_entire table_這使得它是連續的,這意味着您可能只有一個作業(它必須,否則你當然可以添加滿足條件的東西...)。你在這裏試圖做什麼?另外,存儲「年齡」會讓你陷入麻煩 - 你怎麼知道他們什麼時候長大一歲? – 2013-04-08 15:59:46