数据库并发控制确保多个事务并发执行时,数据库的一致性。

考虑以下调度示例,其中 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,都不会得到这样的结果。

数据库系统需要采用并发控制机制,例如锁机制或时间戳机制,来避免非串行化调度的出现,从而保证数据库的一致性。