丢失修改与数据库的一致性

版权声明:本文为博主原创文章,未经博主允许不得转载哦!!! 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,显然是正确的,这样的丢失修改就没有影响数据库的一致性;

这些极端的例子还有很多,不再赘述。

换一种思路,我们给事务加上排它锁,如下图:

这样,丢失修改就解决了,进而也就不影响数据库的一致性;

另外,

分别执行不同的事务对象,并行性都没有了,就更不会影响数据库的一致性了。

 

猜你喜欢

转载自blog.csdn.net/lph188/article/details/85260553
今日推荐