版权声明:本文为博主原创文章,未经博主允许不得转载哦!!! https://blog.csdn.net/lph188/article/details/85260553
丢失修改问题在什么情况下不影响数据库的一致性?在什么情况下影响数据库的一致性?
看到这个问题的第一反应,影响数据库的并发一致性不是有四种吗?
丢失修改、读脏数据、不可重复读、幻影读
怎么问什么时候影响,什么时候又不影响?
我也一脸懵。
下面说说我的看法。
假设有事务 T1、T2,数据库中数据 A=100;
t1 时刻:T1 读取 A=100;
t2 时刻:T2 读取 A=100;
t3 时刻:T1修改A=A-20,写入数据库(此时,数据库中A=80);
t4 时刻:T2修改A=A-10,写入数据库(此时,数据库中A=90);
用图表示如下:
扫描二维码关注公众号,回复:
4938572 查看本文章
最终,A=90,显然数据是错误的(正确值 A=70),发生了数据丢失,所以,就影响了数据库的一致性。
那什么时候不影响呢?
我只能想到极端例子。
如果T1的修改是无用功呢?
如下图所示
最后的结果A=90,显然是正确的,这样的丢失修改就没有影响数据库的一致性;
这些极端的例子还有很多,不再赘述。
换一种思路,我们给事务加上排它锁,如下图:
这样,丢失修改就解决了,进而也就不影响数据库的一致性;
另外,
分别执行不同的事务对象,并行性都没有了,就更不会影响数据库的一致性了。