数据库并发控制-解决问题

作者:vkvi 来源:ITPOW(原创) 日期:2009-7-27

前面谈了,如果不对事务的并发问题作控制,则会产生一系列的问题。

X 锁和 S 锁

X 锁(exclusive locks,排他锁) 如果事务 T 对数据 A 加了 X 锁,则:事务 T 可对数据 A 进行读取和修改;其他事务不能对数据 A 加任何锁,也不能读取和修改数据 A。

S 锁(share locks,共享锁) 如果事务 T 对数据 A 加了 S 锁,则:事务 T 可对数据 A 进行读取,但不能修改;其他事务也能对数据 A 加 S 锁,但不能加 X 锁。

封锁协议

一级封锁协议 在事务 T 修改数据 A 之前,对数据 A 加上 X 锁,直到事务结束才释放,解决了丢失更新的问题。

二级封锁协议 在一级封锁协议的基础上,在事务 T 读取数据 A 之前,对数据 A 加上 S 锁,直到读取结束才释放,解决了脏读的问题。

三级封锁协议 在一级封锁协议的基础上,在事务 T 读取数据 A 之前,对数据 A 加上 S 锁,直到事务结束才释放,解决了不可重复读的问题。

两段封锁协议 对任何数据进行读写之前必须对该数据加锁,在释放一个封锁之后,事务不再申请和获得任何其他封锁,这样缩短了封锁时间,提高了并发性,同时解决了数据不一致的问题。

相关文章