这里有两个表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