事务隔离级别

JDBC之简介

梦想的初衷 提交于 2020-01-17 20:09:16
5、JDBC的API java.sql包和javax.sql包 DriverManager类(驱动管理器),它可以创建连接,它本身就是一个创建Connection的工厂(Factory)。 Driver接口 入口 Connection接口,会根据不同的驱动产生不同的连接 Statement接口,发送sql语句 ResultSet接口(结果集),是用来接收select语句返回的查寻结果的。其实质类似于集合。 以上的资源都需要释放,释放的是数据库的资源 JDBC应用步骤 1,注册加载一个driver驱动 2,创建数据库连接(Connection) 3,创建一个Statement(发送sql) 4,执行sql语句 5,处理sql结果(select语句) 6,关闭Statement 7,关闭连接Connection。 注意:6,7两个步骤势必须要做的,因为这些资源是不会自动释放的,必须要自己关闭 访问Oracle的数据库的驱动名字叫o加到环境变量PATH中。 jdbc14.jar,这个jar文件中出访的驱动程序的.class文件 要使用这个驱动程序,要先将他 一,注册加载驱动driver,也就是强制类加载 1 、 Class.forName(driver); driver = "oracle.jdbc.driver.OracleDriver"; 2 、 Driver d=new

数据库事务学习

て烟熏妆下的殇ゞ 提交于 2020-01-17 18:04:13
数据库事务:    概念 : 数据库事务是构成单一逻辑工作单元的操作集合   概念解释:       1.数据库事务可以包含一个或多个数据库操作,但这些操作构成一个 逻辑上的整体 。       2.构成逻辑整体的这些数据库操作, 要么全部执行成功,要么全部不执行 。       3.构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,即不管事务是否执行成功, 数据库总能保持一致性状态 。       4.以上即使在数据库出现故障以及并发事务存在的情况下依然成立。    原子性(Atomicity):事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。 一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。           一致性状态是指:1.系统的状态满足数据的完整性约束(主码,参照完整性,check约束等)                  2.系统的状态反应数据库本应描述的现实世界的真实状态,比如转账前后两个账户的金额总和应该保持不变。 隔离性(Isolation):并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。 持久性(Durability):事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。

sqlserver事务隔离小结

我是研究僧i 提交于 2020-01-16 08:37:25
SQL Server通过在锁资源上使用不同类型的锁来隔离事务。为了开发安全的事务,定义事务内容以及应在何种情况下回滚至关重要,定义如何以及在多长时间内在事务中保持锁定也同等重要。这由隔离级别决定。应用不同的隔离级别,SQL Server赋予开发者一种能力,让他们为每一个单独事务定义与其他事务的隔离程度。事务隔离级别的定义如下: · 是否在读数据的时候使用锁 · 读锁持续多长时间 · 在读数据的时候使用何种类型的锁 · 读操作希望读已经被其他事务排他锁住的数据时,怎么办?在这种情况下, SQL Server 可以: · 一直等到其他事务释放锁 · 读没有提交的数据 · 读数据最后提交后的版本 ANSI 99定义了4种事务隔离级别,SQL Server 2005能够完全支持这些级别: · 未提交读 在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。 · 已提交读 只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。已提交读是 SQL Server 的 默认 隔离级别。 · 可重复读 像已提交读级别那样读数据,但会保持共享锁直到事务结束。 · 可序列化 工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围。这就阻止了新数据插入查询所涉及的范围,这种情况可以导致幻像读。 此外,SQL

Spring事务组件 源码阅读(Spring声明式事务处理)

☆樱花仙子☆ 提交于 2020-01-16 00:41:21
1 设计原理与基本过程 在使用Spring声明式事务处理的时候,一种常用的方法是结合IoC容器和Spring已有的TransactionProxyFactoryBean对事务管理进行配置,比如,可以在这个TransactionProxyFactoryBean中为事务方法配置传播行为、并发事务隔离级别等事务处理属性,从而对声明式事务的处理提供指导。具体来说,在对声明式事务处理的原理分析中,声明式事务处理的实现大致可以分为以下几个部分: 读取和处理在IoC容器中配置的事务处理属性,并转化为Spring事务处理需要的内部数据结构,这里涉及的类是TransactionAttributeSourceAdvisor,从名字可以看出,它是一个AOP通知器,Spring使用这个通知器来完成对事务处理属性值的处理。处理的结果是,在IoC容器中配置的事务处理属性信息,会被读入并转化成TransactionAttribute表示的数据对象,这个数据对象是Spring对事物处理属性值的数据抽象,对这些属性的处理是和TransactionProxyFactoryBean拦截下来的事务方法的处理结合起来的。 Spring事务处理模块实现统一的事务处理过程。这个通用的事务处理过程包含处理事务配置属性,以及与线程绑定完成事务处理的过程

数据库事务

眉间皱痕 提交于 2020-01-15 05:34:54
1、什么是事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 简单理解,事务就是对数据库一连串的操作,更新、保存和删除,对数据产生变化的操作。 2、为什么需要事务 事务的作用是保证数据准确性和一致性的一种机制。假如没有事务,那我们提交数据不会保存,有异常的时候数据不会回滚。 比如说往银行账户存钱,余额没有添加,去ATM取钱,ATM出故障没吐钱,余额变少了。 3、怎么做 在JAVA开发中通常借助Spring管理事务,大致的原理就是通过AOP在方法前后添加开始事务,提交或回滚的操作。 Spring事务管理分为声明式和编程式两种。 (1)声明式一般是写在配置文件的,它的好处是配置简便,模糊匹配对应的服务方法。 也可以通过注解的方式来开始事务,不过它也是属于声明式。 (2) 编程式 看这个名字大致可以猜出是在我们业务嵌入事务管理代码,好处是事务控制粒度更加细化,缺点是对代码有侵入性。 使用@Transactional来声明事务 当@Transactional作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该注解来覆盖类级别的定义。 @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected

Spring 事务处理

点点圈 提交于 2020-01-15 00:49:13
前言: 事务处理的本质 在学习事务处理前,需要明确一点: 数据库操作最终都要使用到JDBC,那么无论上层如何封装,底层都是调用Connection的commit,rollback来完成 烦人的事务处理: 在日常开发中,数据访问层(DAO)必然需要进行事务的处理,但是我们会发现,事务处理的代码通常是简单的重复的,编写这样的重复代码会浪费大量的时间,所以我们需要找到一种方案可以将这些重复的代码进行抽取,以便与管理维护和复用, 我们的需求:在一系列数据库操作上的方法上增加额外的事务处理代码,让原来的方法中只关注具体的数据处理,即在原本以及存在的数据库操作方法上添加额外的事务处理逻辑 到这里你应该想到AOP了,没错! 这样的场景下AOP是最好的解决方案; 解决方案:AOP 回顾一下Spring的AOP:在结合目前的需求 1.将目标对象(DAO)放入Spring容器 2.告知Spring你的通知代码是什么(事务处理) 3.告知Spring 哪些方法(DAO的CRUD)要应用那些通知(不同的事务处理代码) 4.从Spring中获取代理对象来完成原本的CRUD,代理对象会自动完成事务处理 Spring 事务处理API Spring作为框架,需要进行详细的设计,全方位的考虑事务处理的各个方面,而不仅是简单的帮你执行commit,rollback; Spring对事务处理进行了抽象定义

MySQL-锁

微笑、不失礼 提交于 2020-01-14 22:07:13
MySQL-锁 文章目录 MySQL-锁 锁的分类 按照功能分 按照锁的粒度分 全局锁 表锁 表读锁 表写锁 行锁 快照读与当前读 加锁方式 加锁方式选择 间隙锁 MVCC和间隙锁 元数据锁 元数据锁导致的阻塞 锁的分类 按照功能分 共享锁(读锁/S锁) 其他不可获得X锁 所有连接均可读取,所有连接均不可修改 排他锁(写锁/X锁) 其他不可获得S/X锁 加锁连接可以读取可以修改,其他连接均不可读写 按照锁的粒度分 全局锁 、 表锁 、 行锁 等… 全局锁 MySQL全局锁会使用 读锁 锁定 所有库中所有的表 。 加锁: FLUSH TABLES WITH READ LOCK; 解锁: UNLOCK TABLES; 全局锁加锁后,所有的连接只能读表,加锁的连接进行表中数据的修改会报错。其他连接进行数据修改会阻塞,直到全局锁解锁后返回。一般用在整个库做备份时。 表锁 MySQL表锁在事务需要 更新大表的大部分或全部数据时 。如果使用行锁加锁效率极低,因此这种情况下一般使用表锁,事务涉及多个表时可能会因此死锁,也可以考虑使用表锁来避免死锁。 表锁分为 表读锁 和 表写锁 : 表读锁 lock tables t read; 表读锁时所有连接都可以读,本连接修改会报错,其他连接修改会阻塞,直到锁释放才返回。 表写锁 lock tables t write; 表写锁时,本连接可以读和写

MySQL-事务

风流意气都作罢 提交于 2020-01-14 19:44:05
MySQL-事务 事务定义 事务就是一组原子性的SQL查询语句,要么全部执行成功、要么全部执行失败。 ACID 一个良好的事务数据库系统,必须具备ACID特性。 原子性(Atomicity) 要么全部执行、要么全部不执行 一致性(Consistency) 事务开始和结束时,数据必须保证一致性 隔离性(Isolation) 事务处理过程中、中间状态对其他事务不可见 持久性(Durability) 事务完成后、它对数据的修改时永久性的 事务隔离级别 MySQL有四种隔离级别。 Read Uncommitted读未提交 所有事务可以看到其他未提交事务的执行结果 Read Committed读已提交 事务只能看到已提交事务所做的改动 Repeatable Read可重复读 默认的隔离级别 Serializable串行 强制事务排序、一次只执行一个事务 并发问题 脏读 事务读到了其他未提交的事务修改的数据,此数据可能因回滚而作废。 不可重复读 事务多次读取同一数据,返回的结果不同。 幻读 事务多次读取同一数据,返回的结果条数不同。 不可重复读和幻读区别: 不可重复读:针对其他事务提交前后,对行的修改来说。 幻读:针对其他事务提交前后,对行的增删来说。 不同隔离级别下的并发问题 脏读 不可重复读 幻读 读未提交 √ √ √ 读已提交 × √ √ 可重复读 × × x(注) 串行 × × ×

spring

被刻印的时光 ゝ 提交于 2020-01-14 08:09:01
springmvc常用注解和spring事务的四大特性、事务的传播特性 1.SpringMVC常用注解 RequestParam RequestBody PathVaribale CookieValue ModelAttribute SessionAttribute 2.事务四大特性 ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始

事务 ACID

≯℡__Kan透↙ 提交于 2020-01-14 07:39:53
事务是定义一系列操作在逻辑上可以看成一个完整的操作,具有ACID特性; Atomicity (原子性)   要求事务中所有的操作要么全部完成,要么全部没有发生,如果部分操作失败,则整个事务操作都会失败。 Consistency (一致性)   要求事务中的操作,符合容器(如:数据库)的各种规则,保证数据是合法、与规定好的方式运行,一般通过原子性来保证,数据在事务中会有各种状态,但是结果必须需要语义。   与原子性强调开始/结束状态不一样,一致性强调的是在事务过程中数据状态的不稳定,其他事务是不可见的。(隔离级别会有一些妥协) Isolation (隔离性)   事务与事务间不会相互影响,就像串行执行一样,相互之间并行时是不可见的。 Durability (持久性)   事务完成后,数据状态就保持不变,永久存储。 目前大致有两种比较流行的技术来实现事务: 预写日志(WAL)和影子分页(SP) 。 预写日志(write-ahead logging) ,主要提供ACID中的 原子性和持久性 两种特性的操作:   日志分为redo和undo信息,   undo用于记录修改前的信息,redo用于记录修改后的信息;undo可用于做事务失败的回滚操作,redo可用于做事务提交过程中故障恢复。log文件一般采用追加的方式,I/O效率高。