数据库并发操作和封锁技术

数据库在使用时许多事务可能同时对同一数据进行并发操作此时会破坏数据库的完整性。“并发”指的是在一个CPU上利用分时方法实行多个事务同时做。一般数据库的并发操作会带来三个问题:1.丢失更新 2.读脏数据 3.不可重复读。

个人的解释:1.丢失更新指的是上一个事务的改变在并发过程中没有影响到另一个事务

2.读脏数据指的是上一个事务在未完成的情况下产生的数据影响到了另一个数据

3.不可重复读指的是一个事务有两个读取但是两次读取之间并发了另一个事务导致两次的结果不同

解决办法:这种问题需要以正确的方法进行调度和控制并发事务避免造成数据的不一致

封锁技术的出现可以解决这个问题

首先我们要明白封锁技术的两大分类:X锁和S锁

X锁是排他锁又称为写锁 一旦上锁了其他事务都不能在进行操作了只能让该事务操作

S锁是共享锁又称为读锁 一旦上锁其他事务只能进行读的操作而且上了S锁就不可以上X锁

接下来是很重要的一个东西-----封锁协议

封锁协议分为三级首先是所有都要遵守的一条:事务若想要修改数据需要对该数据加X锁

一级协议再满足一条是只读数据的事务可以不加锁即可

二级和三级协议还需要满足其他事务在读数据前需要加S锁,所不同的是二级协议在读完之后即可释放了S锁而三级协议需要在事务执行完后才释放

一级封锁协议可以解决丢失更新的问题

二级封锁协议可以解决读脏数据

三级封锁协议可以解决不可重复读的问题

个人的一些理解:一级封锁协议在修改数据一开始就上了X锁直到结束才释放,这样修改后的结果才可以被另一个事务利用这样就避免了丢失更新的问题。

二级封锁协议在读数据的时候要加S锁,由于事务一旦开始修改数据就上了X锁那么再去读数据的时候S锁是上不去的这样就不会把事务未完全做完之前修改的脏数据读进去了。、

三级封锁协议要求一旦上了S锁需要在事务结束之后才释放,这样两次读数据之间就不会发生被其他并发事务修改数据的现象(因为上了S锁之后不能上X锁)这样读出的两个数据是一样的。

这样我们就解决了并发产生的三种问题了。

经验分享 程序员 微信小程序 职场和发展