博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM-Spring-20:Spring中事务基础
阅读量:6340 次
发布时间:2019-06-22

本文共 1627 字,大约阅读时间需要 5 分钟。

 

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

 

事务

事务是什么?

  我记得当初的百度百科上讲,事务是执行的最小逻辑单元,它们要么都执行,要么都不执行

  (同生共死)

事务解决什么问题?

  简单的提一个小例子,就转账,先把你钱扣掉了,但中途发生点不可抗拒的因素,结果没转过去,那么如果没有回滚,那么你就白白损失这钱,如果银行先给那个人转达了,但中途发生点问题,你的钱没扣,那银行损失惨重,所以这就需要事务,要么都执行,要么都不执行

 

事务的四个特性

  原子性:都要确保不可再分的最小单元

  一致性:指的是结果要么都成功提交,要么都回滚,一致的

  持久性:事务完成后,会永久的保存到数据库,而不是说你今天有,明天就没了

  隔离性:多个事务之间互不影响

并发事务会造成的问题:

  第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。

  第二类丢失更新:是不可重复读的特殊情况。如果两个事物都读取同一行,然后两个都进行写操作,并提交,第一个事物所做的改变就会丢失。

  脏读:一个事务读取到另一个事务未提交的更新数据。

  幻读也叫虚读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的。

  不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果,中间正好另一个事务更新了该数据,两次结果相异,不可被信任。

事物的四个

 

如何解决这些问题?answer:事物的隔离级别

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

 

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

 

  ③ Read committed (读已提交):可避免脏读的发生。

 

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

  其中Sql Server和Oracle是读已提交mysql是可重复读,他们隔离级别不同,性能也不同,随然串行化避免的问题最多,但是性能太差,大多数时候要根据实际业务进行取舍

 

事务的七个传播行为:

  1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

 

  2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

 

  3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

 

  4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

 

  5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

 

  6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

 

  7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

 

在mysql中如何查看事物的隔离级别:

SELECT @@tx_isolation;

 

在mysql中如何修改事务的隔离级别:

 

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL  {       REPEATABLE READ     | READ COMMITTED     | READ UNCOMMITTED     | SERIALIZABLE   }

 

  如果写GLOBAL就是全局

  如果是SESSION就是当前回话

 

转载地址:http://nqeoa.baihongyu.com/

你可能感兴趣的文章
eclipse html 打开方式
查看>>
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
查看>>
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>