数据库三级封锁协议
数据库三级封锁协议是为了对数据库并发操作进行控制,防止更改丢失,读脏数据,不可重复读等问题.为了解决这类问题引入的解决方案就是加锁,又根据添加锁的种类,设置时间,释放时间的不同分为三种封锁协议.
锁的种类
在数据库的三级封锁协议中分为两种锁
- 排他锁(exclusive lock,X锁),又称为写锁
- 共享锁(shared lock,S锁),又称为读锁
排他锁(X锁)
排他锁,又称为写锁,可以对数据进行读取和修改操作.当一个事务对数据添加X锁时,其他事务都不能对该数据添加锁,即同一时间只有一条事务可以对数据进行修改操作.其他事务只能等待该事务完成后才能对数据进行修改操作.所以我们通常把这类对数据进行修改操作的锁称为写锁.
共享锁(S锁)
共享锁,也可以称为读锁.当一个事务对数据添加S锁时,其他事务也可以对数据添加S锁,即所有添加了S锁的事务都可以同时读取数据内容,但是无法对数据进行修改.
更改丢失
更改丢失指的是当有多个事务对数据进行操作时,有些事务的操作被其他事务所替代.
从上图中我们可以看出 T1 事务的修改操作被 T2 事务的修改操作覆盖了.
不可重复读
不可重复读指的是某一个事务执行期前其他的事务修改,插入或删除了数据,则该事务在验证数据时会出现与开始结果不一致的情况.