数据库事务体系详解

简介

        学习开发至今,数据库部分所学知识一直比较零散,今天整理自己的思路时发现清晰了很多,因此对以前的知识做以总结和梳理。

数据库事务四个特性

  • 原子性(Atomicity):针对独立事务,该事务要么全部完成,要么全部回滚。
  • 一致性(Consistency):针对独立事务,该事务提交后所得数据必须和预期的数据一致,不受故障影响。
  • 隔离性(Isolation):针对多个事务并发,不同事务互不影响,独立执行。
  • 持久性(Durability):针对独立事务,该事务一旦提交,所提交数据必须可永久存放,不受故障影响。

事务并发产生的问题

注意:产生问题的基础是事务并发,也即是说一下问题都是由多个事务同时操作同一部分资源造成。

  • 脏读:事务A开始事务,更新资源Data,原来的值为1,更新Data值为2且未提交事务;此时,事务B开始事务 并读取资源Data,读取的值为2。

        问题:B事务读取到了A事务已经更新,但是没有提交的值,此即为脏读。

  • 不可重读:事务A开始事务,读取资源Data,值为1;此时,事务B开始事务,并更新Data的值为2,接着事务B提交,事务B结束;紧接着,还未结束的事务A又读取资源Data,此时读取到的Data值为2。

        问题:A事务在事务中 ,第一次读取的Data值为1,第二次读取的Data值为B事务修改后的值2,会发现,A事务,在当前事务中两次读取的Data值不一样,此即为不可重读。

  • 幻读:事务A开始事务,统计test表中的记录总数值为5(假设Test表中有5条记录);此时,事务B也开始了事务,并新增一条记录(特别注意是新增一条,而不是修改),事务B提交事务并结束;然后还未结束的事务A又统计了一次Test表的记录总数,发现值变为了6,多了一条。

        问题:事务A在事务中,第一次统计的记录数为5,第二次统计的记录数为6,同一个事务两次取得的统计值不一样,此即为幻读。

  • 第一类丢失更新:
  • 第二类丢失更新:

备注:以上问题中的,不可重读和幻读比较容易混淆,不可重读强调的是,A事务读取到B事务更新的数据;而幻读强调的是,A事务读取到了B事务新增的数据。

事务的隔离级别(四种)

为了解决事务并发所产生的问题,数据库管理系统提供了不同的事务隔离级别,不同的隔离级别对应解决不同的事务并发问题。如下:

隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
未提交读(Read uncommitted)可能可能可能
已提交读(Read committed)不可能可能可能
可重复读(Repeatable read)不可能不可能可能
可串行化(Serializable )不可能不可能不可能

数据库锁

为了实现上述的事务隔离级别,数据库管理系统提供了灵活的锁机制。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值