Concurrency DB2事务在并发情况下的工作原理

Concurrency DB2事务在并发情况下的工作原理,concurrency,transactions,db2,Concurrency,Transactions,Db2,这里有两个表employeeempID int,empName varchar,age int和salarysalID,empID 插入到员工中 选择 如果不存在,请从empID=:employeeID的员工中选择1 在工资中插入 ... 有两个作业与上述逻辑和同一员工同时运行 job1失败并回滚。 job2在job1回滚之前启动,在job1回滚之后提交。 我的问题是: 若job2成功完成,将向employee表中插入多少条记录?1还是0? 更准确地说,job2的步骤1可以看到job1插入的员工

这里有两个表employeeempID int,empName varchar,age int和salarysalID,empID

插入到员工中 选择 如果不存在,请从empID=:employeeID的员工中选择1

在工资中插入

... 有两个作业与上述逻辑和同一员工同时运行

job1失败并回滚。 job2在job1回滚之前启动,在job1回滚之后提交。 我的问题是:

若job2成功完成,将向employee表中插入多少条记录?1还是0? 更准确地说,job2的步骤1可以看到job1插入的员工记录吗? 如果为0,如何确保员工是由job2插入的,还是不会由job1回滚删除? 若job2成功完成,将在employee表中插入多少条记录?1还是0

一,

更准确地说,job2的步骤1可以看到job1插入的员工记录吗

因为您说过job1已回滚,所以job1没有插入任何员工记录

job1告诉数据库,我想插入一条员工记录。DB2然后在行、页或表上设置写锁。定义表时,数据库分析员DBA确定表写入锁定的级别。默认值为第页

只要存在写锁,其他事务就不能读取插入,除非读隔离级别为未提交读。我们假设情况并非如此

在db2允许job2查看job1的行之前,job2必须等待job1提交或回滚。在job1回滚后,将删除写锁,并允许job2继续

如何确保员工是由job2插入的,还是不会由job1回滚删除

在回滚job1之前,DB2不允许job2执行插入


顺便说一下,如果两个事务试图插入同一行,这种问题可能会导致DB2死锁,两个事务都将回滚。同样,这假设事务作业具有比未提交读取更高的读取隔离级别。

啊,并发性,理智的祸根。结果在很大程度上取决于所选择的锁/隔离级别-在“正确”或错误的级别下,子查询可能会锁定整个表,从而使其具有串行性,这意味着您可能只需要一个作业,否则您当然可能会添加满足条件的内容。。。。你想在这里做什么?而且,储存年龄会让你陷入困境——你怎么知道他们什么时候会变老一岁呢?谢谢!这很有帮助。