首页 > 其他 > 详细

事务的使用

时间:2019-09-30 11:59:20      阅读:79      评论:0      收藏:0      [点我收藏+]

事务的特性 ACID

  A:原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

    C: 一致性(Consistency)事务前后数据的完整性必须保持一致。

  I:隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

  D:持久性(Durability)持久性是指一个事务一旦被提交

MySql默认的隔离级别为Repeatable Read,

事务并发问题

 脏读:一个事务读取到了另外一个事务没有提交的数据  (即为在内存中的数据)

 幻度:在同一事务中,两次读取同一数据,得到内容不同  (幻读 :不是针对一条数据,而是多条数据的 幻读针对的是insert)

    { 事务1:查询表中所有记录
                              -------------->事务2:插入一条记录
                              -------------->事务2:调用commit进行提交
            事务1:再次查询表中所有记录

    }

  不可重复读:在同一事务中,两次读取同一数据,得到内容不同 (针对一条数据 不可重复读针对的是update/delete,)

   {   事务1:查询一条记录
                            -------------->事务2:更新事务1查询的记录
                            -------------->事务2:调用commit进行提交
            事务1:再次查询上次的记录

   }

事务隔离级别

  读未提交:可以读到其他事物未提交的事务(出现脏读)

  读写提交: 指一个事务只能读取到另外一个事务已经提交的数据。(克服了脏读) 写数据只会锁住相应的行

  可重复读: 克服读写提交中出现的不可复读的现象,因为在读写提交的时候,可能出现一些值的变化,影响当前事务的执行。(克服了不可重复读)

  串行化: 最高的隔离级别,会要求所有的SQL按照顺序执行,这样就可以克服上述隔离级别出现的问题,所以能够保证数据的一致性。(克服幻读事务隔离级别为串行化时,读写数据都会锁住整张表

详细图解

https://blog.csdn.net/DorAction/article/details/87971378

不可重复读的重点是修改 : 
同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了 
幻读的重点在于新增或者删除 
同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样

事务传播行为

  

  PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。(默认)

 

  PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

 

  PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

 

 

  PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

 

  PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。

 

  PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常

 

  PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

 

事务的使用

原文:https://www.cnblogs.com/guyuedashu/p/11611818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!