数据库锁机制实现隔离

版权声明:转载请注明出处 https://blog.csdn.net/qq_38545713/article/details/79779441
1.数据库能实现对数据操作的四种隔离级别的原理就是通过对数据进行加锁来实现的(行级锁和表级锁),但是锁又分为共享锁和排他锁

共享锁(S锁)和排它锁(X锁)
共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

死锁的产生原理: 因为共享锁可以被多个事物同时施加所以才会产生死锁产生
举例:两个事物A和B,如果事物A对一个资源加上了共享锁,这时事物B也对该资源加上了共享锁,这时如果事物A想要修改该数据就必须对他加上排他锁,所有就必须等待事物B释放他自身的共享锁,同样,事物B也想要修改该资源也同样在等待者事物A释放他自身的共享锁,这样就会产生两个事物在互相的等待对方释放锁而产生死锁现象 (这个例子只是产生死一种场景)
避免死锁:
其中最具有代表性的 避免死锁算法 银行家算法
解除死锁:
当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。
(4). 使用较低的隔离级别。(注:使用较低的隔离级别(例如已提交读)比使用较高的隔离级别(例如可序列化)持有共享锁的时间更短,减少锁竞争)

事物的四种隔离级别
1、Read uncommitted:对数据进行行级加锁(行级锁)
2、Read committed :对数据进行行级加锁(行级锁)
3、Repeated  Read :对数据进行行级加锁(行级锁)
4、serializable:对数据进行表级加锁(表级锁)

由于程序只要对数据库数据进行操作,包括读取操作都是必须要先对操作的数据进行加锁之后才能操作,所以数据库的隔离级别机制原理就是通过对数据进行加不同的锁来操作的

猜你喜欢

转载自blog.csdn.net/qq_38545713/article/details/79779441
今日推荐