数据库的事务隔离级别

数据库的四种隔离级别是什么

1、读取未提交内容;2、读取提交内容;3、可重读;4、可串行化。隔离级别采取不同的锁类型来实现,若读取的是同一个数据可能发生脏读、幻读等问题

加深理解

之前看了很多次这个隔离级别的解释,因为各种文章给这几个英文的翻译都不太一样,当时看完理解,过后就忘,今天自己总结一下,加深印象;

四种级别

读未提交(Read Uncommitted):银行客户A正在进行一笔转账操作,此时客户B也发起了一笔转账操作,尚未提交到数据库中。如果此时客户C查询客户B的账户余额,可能会看到并不准确的数据,因为客户B的转账操作还没有完成。

读已提交(Read Committed):在该隔离级别下,客户C查询客户B的账户余额只能看到已经提交到数据库中的数据,而不能看到客户B的转账操作尚未完成的金额。

可重复读(Repeatable Read):在该隔离级别下,客户A和客户B同时进行一笔转账操作,并且同时查询自己的账户余额。客户A的转账操作已经提交到数据库中,但是客户B的转账操作还没有提交。此时客户A再次查询自己的账户余额,仍然能够看到之前的数据,因为他们在同一个事务内。而客户B查询自己的账户余额,则会看到最新的数据。

串行化(Serializable):在该隔离级别下,客户A和客户B同时进行一笔转账操作,并且同时查询自己的账户余额。客户A的转账操作已经提交到数据库中,但是客户B的转账操作还没有提交。此时客户A再次查询自己的账户余额,需要等待客户B的转账操作提交后才能看到最新的数据,因为客户B的操作必须在客户A的操作完成之后才能进行。

综上所述,不同的隔离级别会对银行业务产生不同的影响,需要根据实际需求选择适当的隔离级别来保障数据的准确性和安全性。

对应产生的问题及解决:

1,Read Uncommitted(读取未提交内容,未授权读)

这个隔离级别,所有的事务都可以看到其他未提交事务的执行结果。即能读取到未提交的数据,产生的问题是脏读(Dirty Read)。
例如,如果一个客户正在进行转账操作,但尚未提交该事务,则其他客户可以看到该客户的账户余额已经发生了变化。

1,其他事务读未提交数据,出现脏读
2,如果一个事务开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据,该隔离级别可通过排他锁实现
3,避免了更新丢失,却可能产生脏读,也就是事务B读到了事务A未提交的数据;
注:读未提交——一个事务写数据时,只允许其他事务对这行数据进行读,所以会出现脏读,事务T1读取T2未提交的数据;

2,Read Committed(读取提交内容)

例如,两个客户同时将钱从一个账户转移到另一个账户,如果事务顺序颠倒,则最终结果账户余额不正确。
1,允许写事务,所以会出现不可重复读
2,读取数据的事务,允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
3,该隔离级别避免了脏读,但是却可能出现不可重复读。事务A事先读取了数据,事务B紧接着更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。
读已提交:读取数据的事务允许其他事务进行操作,避免了脏读,但是会出现不可重复读,事务T1读取数据,T2紧接着更新数据并提交数据,事务T1再次读取的时候,和第一次读的不一样。

3,Repeatable read(可重复读取)

一个事务可以多次读取同一数据,而且在这个过程中,其他事务不能对该数据进行修改,再次读取数据(开启另外一个事务)会读取到最新提交的数据;
例如,在一个客户正在准备向某个账户转账时查询卡里有100元,另一个客户可能会向该账户存入100元,此时第一个客户再次查询(开启另外一个事务),会发现变成了200,从而导致第一个客户看到不同的账户余额。
1,禁止写事务;
2,读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止其他任何事务。
3,避免了不可重复读取和脏读,但是有时可能出现幻读。这可以通过“共享读锁”和“排他写锁”实现。
注:可重复读,读事务会禁止所有的写事务,但是允许读事务,避免了不可重复读和脏读,但是会出现幻读,即第二次查询数据是会包含第一次查询中未出现的数据

4,Serializable (序列化)

1,禁止任何事务,一个一个进行;
2,提供严格的事务隔离。它要求事务序列化进行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
3,序列化是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读,不可重复读,还避免了幻读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见未见过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值