day18-事务与连接池 6.事务隔离级别与解决问题


开两个cmd窗口,相当于两个事务。



read-uncommitted这种级别是解决不了任何问题的,它什么情况都能出现。刚才演示了脏读,再演示就出现了不可重复读。
read-committed隔离级别能解决脏读问题。

read-committed是解决了脏读的问题,但是还是出现了不可重复读的问题。



可能有的人会认为这没有问题,A事务提交commit之后我B事务读到没问题啊,这是正确的。这种情况在开发里面有时候是没有问题的有时候是有问题的。如果我现在要做报表,现在查询的数据要做成报表导出来,导成文件,例如说我做的是一个交通管理系统,我要统计这个月发生了多少起车祸,那就有问题了,第一次查八起车祸,第二次查十八起车祸,两次读取的结果不一样,因为你读取了别人提交的数据。问题是这个报表以哪个为准,第一次八起,第二次十八起,没准你第三次查又变了。不确定哪个数据为准。开发里面有时候会影响,因为你不知道用哪个数据。但是有些情况是我只是想看一下我也不想导成报表之类的,只是看一下那就无所谓了。但是有些情况就必须要求第一次和第二次查是一致的。所以不可重复读在某些情况是必须考虑的。
oralce的事务隔离级别是read-committed。不是说不可重复读是很严重的错误,至少人家oracle是允许这样的操作的,但是在某些情况下是不允许的。
不可重复读就是一个事务读取了另外一个事务提交的数据。如果现在我的数据库的事务隔离级别是Repeatable read,那么在我的事务过程中,当A事务提交了数据,B事务这边也是不更新的,保证了我每次查询都是一样的。那么在这样的数据库隔离级别下,B事务怎么能读取A事务提交的数据呢?很简单,B事务commit之后再开启事务再读取就可以了。那么这种操作就能够保证在我的这个事务过程我的数据是OK的。但是Repeatable read是不能够实时更新数据。但是这种方案在开发中有的情况下是用的到的,就好像刚才说的做报表每次查询都不一样那不就废了吗?应该每次查都一样才能做报表。



虚读和幻读演示也是麻烦的事情,因为它是强调insert。这次读和上次读的条数不一样。它是在一定概率下会出现的。
如果事务隔离级别为串行化(Serializable)它会锁表。意思是我的事务操作过程中谁也玩不了,得等到我玩完了你再玩。只有A事务commit之后B事务才能查到。但是这种操作性能很垃圾。但是那种数据要求非常严格必须得准确你就得用这种数据库事务隔离级别。




你连表操作的功能权限都没有,但是性能相当垃圾。
day18-事务与连接池 6.事务隔离级别与解决问题的更多相关文章
- 十三、事务、连接池 、ThreadLocal 、BaseServlet自定义Servlet父类 、 DBUtils à commons-dbutils
l 事务 l 连接池 l ThreadLocal l BaseServlet自定义Servlet父类(只要求会用,不要求会写) l DBUtils à commons-dbutils 事务 l 事务的 ...
- 03 事务,连接池DBCP,C3P0,DBUtils
事务 Transaction 其实指的一组操作,里面包含许多个单一的逻辑.只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态(回滚) 事务的作用:为了确保逻辑的成功. 例子: ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- MyBatis基础_连接池与事务、动态SQL、注解开发
一.MyBatis连接池及事务控制 1.连接池 在实际开发中,都会使用连接池,因为它可以减少获取连接缩消耗的时间.所谓连接池,就是存储数据库连接的容器.连接池中存储一定数量的数据库连接,当线程需要使用 ...
- 【MyBatis】MyBatis 连接池和事务控制
MyBatis 连接池和事务控制 文章源码 MyBaits 连接池 实际开发中都会使用连接池,因为它可以减少获取连接所消耗的时间.具体可查看 MyBatis 数据源配置在 SqlMapConfig.x ...
- Spring Boot1.5.4 连接池 和 事务
原文:https://github.com/x113773/testall/issues/10 默认连接池---spring Boot中默认支持的连接池有Tomcat.HikariCP .DBCP . ...
- 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...
- 事务的ACID和四个隔离级别
在实际的业务场景中,并发读写引出了和事务控制的需求.优秀的事务处理能力是关系型数据库(特别是oracle等商用RDBMS)相对于正当风口的NoSQL数据库的一大亮点.但这也从另一方面说明了事务控制的复 ...
- Java实战之04JavaWeb-05事务和连接池
一.事务部分 1.事务的简介 做一件事情,这个一件事情中有多个组成单元,这个多个组成单元要不同时成功,要不同时失败.A账户转给B账户钱,将A账户转出钱的操作与B账户转入钱的操作绑定到一个事务中,要不这 ...
随机推荐
- android客户端登录&注册的实现
MainActivity多线程的实现: package com.example.loginconnect; import java.lang.ref.WeakReference; import jav ...
- Spark Structured Streaming框架(5)之进程管理
Structured Streaming提供一些API来管理Streaming对象.用户可以通过这些API来手动管理已经启动的Streaming,保证在系统中的Streaming有序执行. 1. St ...
- FineReport报表使用
FineReport报表是帆软公司推出的可以嵌入java的免费报表. FineReport有2部分组成,一有c/s端的报表工具制作cpt结尾的报表文件:二是 java调用报表的web程序. 这里主要说 ...
- sqlserver 函数里并返回一个表格数据拼接的字符串
Create function [dbo].[GetChildWorkerExtension]( @ChildId int)returns nvarchar(100)asbegin ...
- 分享知识-快乐自己:Spring整合定时器
前期工作:(引入相关 JAR ) <spring.quartz>1.8.4</spring.quartz> <!--spring 定时--> <depende ...
- 1W字看懂互联网知识经济
互联网知识经济,发生关键变化的不是知识,而是经济. 今天和大家分享方军老师的新书<付费:互联网知识经济的兴起>.这本书是一个老互联网人看新知识经济,很有意思的视角在于,以互联网的发展为节点 ...
- Struts2与OGNL
Action会自动放入值栈,成员变量会自动放入root区 如果是方法中的对象 要放入值栈 push()或者getRoot().push(); 界面取值 直接用对象的属性名进行取值
- spring学习-1
spring框架的组件结构图 IOC(Inversion of Control):反转控制,思想是反转资源获取方向,传统的资源查找方向是组件向容器发起请求资源查找,作为回应,容器适时的返回资源,IOC ...
- Debian for ARM
/************************************************************************* * Debian for ARM * 说明: * ...
- aac格式介绍
AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式 字节位置 意义0x08, ...