首页 > 其他分享 >事务隔离级别和传播机制

事务隔离级别和传播机制

时间:2022-08-30 14:24:32浏览次数:37  
标签:事务 隔离 级别 提交 操作 数据 读取

1:事务
事务:一组逻辑操作单元,使数据从一种状态变换为另一种状态。

逻辑操作单元: 一个或者多个DML操作。

事务处理(事务操作):保证所有的事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式,当在一个事务中执行多个操作的时候,要么所有的事务都被提交(commit),那么这些修改就会被永久的保持,要么数据库管理系统将放弃所有的修改,进行回滚(rollback)到最初状态。

回滚的意义:
为了确保数据库中数据的一致性,数据的操作应该是离散的成组的逻辑单元,当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应该全部视为错误,所有的从起始点以后的操作全部退回到最初状态。

2:事务的原子性(ACID)
原子性:Atomicity ,事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:Consistency,事务必须使得数据库从一个 一致性状态变化到另一个 一致性状态。
隔离性:Isolation,事物的隔离性是指一个事务的执行不能被其他的事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行各个事务之间不能相互干扰。
持久性:Durability,持久性是指任何一个事务一旦被提交,它对数据库中数据的改变是永久性的,接下来的其他操作和数据库故障不应该对其产生影响。
3:并发操作的影响

4:四种隔离级别

 

 

5:事务传播机制

 

一.名词理解

      脏读:事务1第二次读取时读取到了事务2未提交的数据

      不可重复读:事务2在事务1第二次读取时,提交了数据。导致事务1前后两次读取的数据不一致

      幻读:事务1在第二次读取数据时读取到了事务2提交的数据

      不可重复读和幻读的区别:

           不可重复读针对的是读取到的值不同,幻读针对的是读取到的数据条数不同

二.事务的隔离级别由高往低

       1.SERIALIZABLE  可串行读

           这是效率最低最耗费资源的一个事务级别,和可重复读类似,但在自动提交模式关闭情况下可串行化读会给每个查询加上共享锁和排他锁,意味着所有的读操作之间不阻塞,但读操作和阻塞別的食物的写操作,写操作也阻塞读操作

       2.REPEATABLE READ  可重读读取数据,这也是Mysql默认的隔离级别

            一个事务内的两次无所查询返回的数据都是一样的,但别的事务的新增数据也能读取到,比如另一个事务插入了一条数据并提交,这个事务第二次去读取的时候发现多了一条之前查询数据列表里面不存在的数据,这个级别避免了不可重复读取,但不能避免幻读的问题

       3.READ COMMITTED 读取已提交的数据

            一个事务只能读取数据库中已经提交过的数据,解决了脏读的问题,但不能重复读,即一个事务内的两次查询返回的数据是不一样的,如第一次查询金额100,第二次去查询可能就是50了,这就是不可重复读取.

       4.READ UNCOMMITTED 读取未提交的数据

            这是最不安全的一种级别,查询语句在无锁的情况下运行,并能读取到别的未提交的数据,造成脏读,如果未提交的那个事务数据全部回滚了,而之前读取了这个事务的数据即未脏数据。

上面介绍了4种事务隔离级别及脏读、不可重复读、幻读与它们的联系,对应的关系表如下:

三.事务传播机制

           1.REQUIRED 如果当前方法没有事务则加入事务,没有则创建一个事务

           2.NOT_SUPPORTED 不支持事务,如果当前有事务则挂起事务运行

           3.REQUIREDS_NEW 新建一个事务并在这个事务中运行,如果当前存在事务就把当前事务挂起,新建的                                           事务的提交与回滚一挂起事务没有联系,不会影响挂起事务的操作

           4.MANDATORY 强制当前方法使用事务运行,如果当前没有事务则抛出异常

           5.NEVER 当前方法不能存在事务,即非事务运行,如果存在事务则抛出异常

           6.SUPPORTS 支持当前事务,如果当前没事务也支持非事务状态运行

           7.NESTED 如果当前存在事务,则在嵌套事务内执行,嵌套事务的提交与回滚与父事务没有任务关系,反之,当父事务提交嵌套事务也一起提交,父事务回滚会也回滚嵌套事务的,如果当前没有事务,则新建一个事务运行.

标签:事务,隔离,级别,提交,操作,数据,读取
From: https://www.cnblogs.com/liftsail/p/16639142.html

相关文章

  • 事务流程与介质恢复
    事务生命周期-->获取排他锁-->重做数据存入PGA(进程程序的全局区)-->获取复制锁和重做分配锁-->获取重做日志分配空间-->释放重做分配锁-->重做日志缓冲区同步重做日......
  • 8.Hystrix隔离术
    Hystrix隔离之ThreadPoolKeyHystrix可以不填写ThreadPoolKey默认Hystrix会使用GroupKey命名线程池在Setting中加入andThreadPoolKey进行命名 Hystrix隔离介绍Hys......
  • MySQL PXC集群大事务提交超限
    研发人员在测试大事务提交时遇见了错误:Goterror5-'Transactionsizeexceedsetthreshold'duringCOMMIT测试了几次都是1200S的时候停止的,不过在注释掉特定步骤后,......
  • oracle 隔离级别
    一、事务和隔离级别事务的概念;事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,事务具有原子性。隔离级......
  • AXI事务ID与outstanding/out of oreder/interleaving实现关系
    AXI事务ID与outstanding/outoforeder/interleaving实现关系前言众所周知,AXI3/AXI4支持outstanding/outoforder/interleaving的特性,但是这一特性是根据AXI哪一路实现......
  • 【DB】事务及ACID
    一、事务事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可......
  • 事物的隔离性和MVCC
    事物的隔离性mysql的服务端是支持多个客户端同时与之连接的,每个客户端可能还并发了好几个连接,所以mysql是需要同时处理很多事情的,每一件独立的事情就叫做事务。我们知道......
  • (WebFlux)003、多数据源R2dbc事务失效分析
    一、背景最近项目持续改造,然后把SpringMVC换成了SpringWebflux,然后把Mybatis换成了R2dbc。中间没有遇到什么问题,一切都那么的美滋滋,直到最近一个新需求的出现,打破了往日的......
  • DataContext使用事务
    1//必须打开连接,用于事务的创建2if(db.Connection.State==ConnectionState.Closed)db.Connection.Open();3using(DbTrans......
  • 声明式事务
    1、回顾事务把一组业务当成一个业务来做;要么都成功,要么都失败!事务在项目开发中,十分的重要,涉及到数据的一致性问题,不能马虎!确保完整性和一致性;事务ACID原则:   ......