理解数据库事务的隔离级别

当涉及到这种级别的隔离时,情况确实很复杂。
我们以2 02 2 年某城市的银行系统为例。
这种隔离级别就像保护数据安全的一道防线。
首先,我们来谈谈ReadUncommited。
这就像银行大厅。
客户(交易)即使钱还没到账,也可以随意查看账户信息。
这就像脏读一样。
有人让领导给Xingo打钱(交易A),Xingo查了一下账户(交易B),哇,5 000块钱出来了。
结果领导下台了,真吾无缘无故地高兴。

我们来谈谈ReadCommited。
就像银行出纳员一样。
客户只能看到转入自己账户的钱,即使想看也看不到别人账户里的钱。
这有助于防止脏读。
但如果你查一次银行账户余额,再查一次,中间有人给你转账,那就叫不重复读。

RepeatableRead 怎么样?这就像银行的VIP服务。
无论您查询多少次,您的账户信息都与第一次相同。
这有助于防止脏读和不可重复读。
但如果你查了一下,发现有人突然花钱了,你的账单就太高了。
这称为幻读。

终于可以序列化了,就好像银行行长在看着一样。
所有事务必须依次执行,以避免数据不一致问题,但效率较低。

所以这种级别的隔离是一把双刃剑。
使用得好,数据安全就有保障。
如果使用不当,它们的效率会非常低。
您选择哪一个将取决于您的业务需求 - 无论您想要数据安全还是效率 - 并且需要平衡。

数据库事务隔离级别有哪些

严格来说,数据库事务的四种隔离级别决定了数据一致性和事务间互操作之间的权衡。
我们先来说说最重要的事情。
ReadUncommited阶段是脏读;允许读取未压缩的数据,这可能导致非重复读取和幻像读取。
但由于数据一致性较差,很少使用。
比如说,为了跟上去年我们办的活动的节奏,我什至没有想到这一步。

还有一件事,ReadCommited 阶段可以防止脏读;但是,可能会发生不可重复读取和幻读。
此级别是许多数据库(例如 SQL Server 和 Oracle)的默认设置。
考虑性能和数据一致性。
但有一个重要的细节。
第二种类型的更新丢失仍然可能发生。

一开始我以为RepeatableRead可以完全避免幻读,但事实上,它只是部分缓解而已。
该级别是MySQL的默认设置,适用于需要严格数据一致性的情况。
等等还有一件事。
Serialized阶段可以防止所有问题,但并发量很低,一般只在极端情况下使用。

最后,我想警告您一个容易陷入的陷阱。
选择隔离级别时,必须根据自己的业务需求,平衡一致性和性能。
很多人不关心这个,但我认为值得一试。