作业帮 > 综合 > 作业

急急急急急!过两天就要考试了,高手看到请赶紧解答下,关于数据库的共享锁和排他锁的问题。

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/31 02:03:47
急急急急急!过两天就要考试了,高手看到请赶紧解答下,关于数据库的共享锁和排他锁的问题。
假如事物T1对数据对象A加上S锁,是不是在其他事物没有对A加上S锁前,T1可以不用对A进行解锁直接再加上X锁。如果事物T2在T1对A加上S锁之后,T1对A加上X锁之前,对A加上了S锁,则TI必须对自己加在A上的s锁进行解锁后才能继续加上X锁?

因为我看到书上,当只有T1对A加了S锁,则TI不用对S进行解锁可以直接在A上加A锁,而当两个事物对A都进行了加锁的时候,则TI就必须先解锁了。我看到觉得有些混乱,书上也并没有对这个作出解释,共享锁的概念中也只说“其他事物只能对A加S锁,而不能加X锁,直到T1释放了A的S锁。” 并没有说T1在那种情况下自己可以直接加X锁。

并且如下图,T2对A加了S锁后,T1再想对A加X锁就得等待了。假如排除两段锁协议和死锁的条件,要想T1能够继续对A加X锁,是不是要T1解除对A的S锁,还是是T2解除对A的S锁,或者是两者中其一解掉了对A的S锁就行了?

这是个同一事务对同一数据对角加锁、解锁问题。
第一个问题完全可以,解释有点麻烦,你可以在你要考试的那本书中的两段锁协议那节看到这样的例子。
第二个问题符合封锁两种类型的要求,可以这样加锁。但是会带来数据不一致性的问题,看你加锁对数据的操作了。数据不一致性的问题举个例子:T2加S 锁后读A数据为100,但之后T1事务在X后修改A=200,T2再次读时A就为200。出现不可重复读的问题。其实对于第二个问题不管是解S锁还是不解都会出现不可重复读问题,你也可不考虑。所以就没有TI必须对自己加在A上的s锁进行解锁后才能继续加上X锁这说。没有必要!!!