数据库并发控制确保多个事务并发执行时,数据库的一致性。
考虑以下调度示例,其中 T1 和 T2 代表两个并发事务:
T1:
1. Slock B (对数据项 B 加共享锁)
2. Y=R(B)=2 (读取数据项 B 的值为 2,赋值给变量 Y)
3. Unlock B (释放对数据项 B 的共享锁)
4. Xlock A (对数据项 A 加排他锁)
5. A=Y+1=3 (将变量 Y 的值加 1 后赋值给数据项 A)
6. W(A) (写入数据项 A)
7. Unlock A (释放对数据项 A 的排他锁)
T2:
1. Xlock A (对数据项 A 加排他锁)
2. Unlock A (释放对数据项 A 的排他锁)
3. Xlock B (对数据项 B 加排他锁)
4. B=X+1=3 (将变量 X 的值加 1 后赋值给数据项 B)
5. W(B) (写入数据项 B)
6. Unlock B (释放对数据项 B 的排他锁)
上述调度并非串行化的。因为最终 A 和 B 的值都为 3,而无论是先执行 T1 还是先执行 T2,都不会得到这样的结果。
数据库系统需要采用并发控制机制,例如锁机制或时间戳机制,来避免非串行化调度的出现,从而保证数据库的一致性。