首页 > 其他分享 >事务

事务

时间:2024-06-21 19:21:26浏览次数:11  
标签:事务 隔离 幻读 提交 数据 读取

一、事务的四大特性

  1. 原子性(Atomicity)
    事务包含的所有数据库操作要么全部成功,要不全部失败回滚。

  2. 一致性(Consistency)
    一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。一致性规定事务提交前后只存在两个状态,提交前的状态和提交后的状态,绝对不会出现中间的状态。最典型的例子就是银行转账,A和B之间互相转账,账面加起来总和5000元,无论A和B之间怎么转,转几次,成功与否,事务结束后A和B账面总和还是5000元。

  3. 隔离性(Isolation)
    隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

  4. 持久性(Durability)
    持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

二、事务并发时存在的问题

  1. 脏读(Dirty Read)
    脏数据所指的就是未提交的数据,而脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。比如,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被称为脏读。

  2. 不可重复读(Non-repeatable Read)
    一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,我们称之为不可重复读。例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。

不可重复读和脏读的区别:脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是在同一事务内读取了前一事务提交的数据,即前一次读到的数据是另一个事务提交前,后一次读到的数据是提交后的。

  1. 幻读(Phantom Read)
    一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。

幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

在实际开发和使用中,其实幻读问题是可以接受也符合用户的心理预期,比如在淘宝双十一抢东西,点击“购买”,成功进入“下单页面”,结果到“付款页面”却提示已经被抢完,这是可以接受的。

三、四个隔离级别

  1. 读未提交(Read uncommitted)
    所有事务都可以看到其他未提交事务的执行结果。本隔离级别是最低的隔离级别,虽然拥有超高的并发处理能力及很低的系统开销,但很少用于实际应用。因为采用这种隔离级别只能防止更新丢失问题(这个问题现代关系型数据库已经不会发生),不能解决脏读,不可重复读及幻读问题。

  2. 读已提交(Read committed)
    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别可以防止脏读问题,但会出现不可重复读及幻读问题。

  3. 可重复读(Repeatable read)
    这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。这种隔离级别可以防止除幻读外的其他问题。

  4. 串行化(Serializable )
    这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读、第二类更新丢失问题。在这个级别,可以解决上面提到的所有并发问题,但可能导致大量的超时现象和锁竞争,通常数据库不会用这个隔离级别,我们需要其他的机制来解决这些问题:乐观锁和悲观锁。

学习地址:https://blog.csdn.net/weixin_43146572/article/details/117413762

标签:事务,隔离,幻读,提交,数据,读取
From: https://www.cnblogs.com/zjh2003/p/18260060

相关文章

  • MySQL索引、事务与存储引擎
    目录1.索引介绍(1)工作方式(2)创建索引的依据2.索引类型(1)普通索引(2)唯一索引(3)主键索引(4)多列组合索引(单列索引与多列索引)(5)全文索引(FULLTEXT)(6)删除和查看索引以及各字段的含义(1)删除索引(2)查看索引(3)各字段的含义3.遇到select查询语句执行速度慢该怎么办?4.事务介绍(1)事务的ACID特性(2)隔离......
  • 提交数据库事务时报告了一个错误,但无法确定该事务在数据库服务器上是成功还是失败
    客户的库偶尔报下面这个错误:Anerrorwasreportedwhilecommittingadatabasetransactionbutitcouldnotbedeterminedwhetherthetransactionsucceededorfailedonthedatabaseserver日志里记超时,而程序里设置的超时时间是3小时,这里3-5分钟就超时了......
  • MySQL进阶知识之视图、触发器、事务
    【一】MySQL进阶知识之视图【1】视图介绍(1)什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用视图也是一张表在计算机科学中,视图(View)是一种虚拟表,其内容是一个或多个基本表的查询结果。视图基于数据库中的数据,通过定义查询语句来构建,并在需要时动......
  • Spring框架声明是事务
    声明式事务(DeclarativeTransactionManagement)是Spring框架提供的一种对程序事务进行管理的方式。这种管理方式的核心思想是采用声明的方式(通常是在配置文件中声明,而非在代码中硬编码)来处理事务,从而简化开发过程,降低开发者处理复杂事务的难度。在声明式事务中,开发者通过注解(如@T......
  • 凤凰架构记02-事务
    事务的基本特性A原子性:一系列操作为一个原子,都成功或都撤销I隔离性:不同操作之间读写数据相互独立,不会彼此影响D持久性:成功提交的数据都会被持久化,不会丢失C一致性:一致性为最终目的,所有事物处理最终的数据状态保持一致 内部一致性:单数据源有确定并发事务的读写顺序外部一致......
  • 【总线】AXI4第二课时:深入AXI4总线的基础事务
                    大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁。......
  • .NET Core 3.x 基于AspectCore实现AOP,实现事务、缓存拦截器
    最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理。给一个方法加一个缓存特性,那这个方法就会进行缓存。这个也是网上说的面向切面编程AOP。AOP的概念也很好理解,跟中间件差不多,说白了,就是我可以任意地在方法的前面或后面添加代码......
  • 关于RuntimeException与事务
    1.spring的默认回滚策略当采用@Transactional注解方法抛出RuntimeException时,spring会默认回滚事务对于检查型异常(即不是RuntimeException子类或其子类),spring默认不会回滚,除非明确指定@Transactional(rollbackFor=MyException.class)2.简化代码:使用运行时异常不再需要为每一......
  • 【Seata】Seata——分布式事务框架(理论篇)
    目录解释Seata的三大角色Seata的分布式事务解决方案:AT模式整体机制一阶段二阶段完整图例XA模式DTP模型Seata的XA模式Seata-XA的价值小结XA协议的问题TCC模式解释Seata的TCC模式Seata-TCC特点Saga模式Saga的价值Saga状态机基本原理Saga状态机设计器四种模式的对比......
  • oracle事务
    1事务的概念事务是将数据库从一种一致性状态转变为另外一种一致性状态2事务的四个特征(ACID)原子性(Atomicity):事务的所有执行要么一起成功,要么一起失败一致性(Consistency):事务将数据从一种一致性状态转为另外一种一致性状态隔离性(Isolation):事务中所有修改未提交的数据......