事务隔离级别

Spring 事务-04-隔离和传播-1-TransactionDefinition

孤人 提交于 2020-02-27 01:09:35
TransactionDefinition 实例(默认描述传播行为、隔离级别、超时等。 类图如下: 接口分析如下: package org.springframework.transaction; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.support.AbstractPlatformTransactionManager; import java.sql.Connection; /** * 定义与spring兼容的事务属性的接口,可以设置传播行为、隔离级别、超时等。 * 基于类似于EJB CMT属性的传播行为定义。 * * 注意,除非启动一个实际的新事务,否则不会应用隔离级别和超时设置。 * 因为只有{@link #PROPAGATION_REQUIRED}

SQL进阶(1)——MySQL元数据与索引

混江龙づ霸主 提交于 2020-02-26 23:11:09
文章目录 1.mysql元数据 获取服务器元数据 2.mysql函数 2.1 常用的字符串函数 2.2 数字函数 2.3 日期函数 2.4 高级函数 3.MySQL索引 3.1 普通索引 3.1.1 创建索引 3.1.2 修改表结构(添加索引) 3.1.3 创建表的时候直接指定 3.1.3 删除索引的语法 3.2 唯一索引 3.2.1 创建索引 3.2.2 修改表结构 3.2.3 创建表的时候直接指定 3.3 使用ALTER 命令添加和删除索引 3.4 使用 ALTER 命令添加和删除主键 3.5 显示索引信息 4.MySQL 事务 4.1、事务控制语句: 4.2、MYSQL 事务处理主要有两种方法: 1.mysql元数据 你可能想知道MySQL以下三种信息: 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数。 数据库和数据表的信息: 包含了数据库及数据表的结构信息。 MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。 在MySQL的命令提示符中,我们可以很容易的获取以上服务器信息。 获取服务器元数据 以下命令语句可以在 MySQL 的命令提示符使用,也可以在脚本中 使用,如PHP脚本。 命令 描述 SELECT VERSION( ) 服务器版本信息 SELECT DATABASE( ) 当前数据库名 (或者返回空) SELECT

事务的隔离级相关问题

给你一囗甜甜゛ 提交于 2020-02-26 05:13:52
1.什么是事务 事务指的是逻辑上的一组操作,要么成功,要么都不成功,例如转账! 2.事务有哪些特性? A,原子性,指的是事务不可分割,要么全部成功,要么全部不成功 C,一致性,指的是发生前后数据保持一致,例如转账前后总体的钱数不能变化 I,隔离性,在并发访问数据库时候,一个事务的操作不能被另一组事务干扰 D,持久性,事务一旦提交,对数据库改变是持久的,即使数据库发生故障也不对其有任何影响 3.并发事务带来的问题 脏读:一个事务读取到了另一个操作数据库但是未提交的事务 不可重复读:A事务多次读取数据库,因为B事务修改了数据库,导致A事务前后两次读取到的数据不一致 幻读:A事务多次读取数据库,因为B事务插入了一些数据,导致A事务前后两次读取到的数据不一致 4.不可重复读与幻读的区别 不可重复读在于B事务对于数据库的修改,重点是修改 幻读在于B事务对于数据库的增删,重点是增删 5.事务的隔离级别 1)READ-UNCOMMITTED (读取未提交),最低隔离级别 2)READ-COMMITTED (读取已提交),可阻止脏读,可能发生不可重复读或者幻读 3)REPEATABLE-READ(可重复读),对统同一字段多次读取内容一致,可以避免发生脏读,不可重复读,可能发生幻读 4)SERIALIZABLE(可串行化),最高的隔离级别 来源: oschina 链接: https://my

对注解@Transactional的解读

送分小仙女□ 提交于 2020-02-25 22:19:30
在SpringBoot则非常简单,只需在业务层添加事务注解(@Transactional )即可快速开启事务。虽然事务很简单,但对于数据方面是需要谨慎对待的。 @Transactional注解用于两种场景: 标于类上:表示所有方法都进行事务处理 标于方法上:仅对该方法有效 一、事务传播行为 @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下) @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务 @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务 @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常 @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反) @Transactional(propagation=Propagation

事务隔离级别(IsolationLevel)

好久不见. 提交于 2020-02-25 19:54:29
来源: https://www.cnblogs.com/wms01/p/6183241.html 事务隔离级别(IsolationLevel) 事务的特性(ACID) 1、原子性(Atomicity)   事物是数据库的逻辑工作单位,事务中的诸多操作要么全做要么全不做 2、一致性(Consistency)   事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态 3、隔离性(Isolation)   一个数据的执行不能被其他事务干扰 4、持续性/永久性(Durability)   一个事务一旦提交,它对数据库中的数据改变是永久性的 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好,这点很好理解 事务的隔离级别(IsolationLevel) 1 // 摘要: 2 // Specifies the transaction locking behavior for the connection. 3 public enum IsolationLevel 4 { 5 // 摘要: 6 // A different isolation level than the one specified is being used, but the 7 // level cannot be determined. 8 Unspecified =

Mysql事务隔离实现机制

我怕爱的太早我们不能终老 提交于 2020-02-25 19:14:13
今天我们来看看事务隔离的实现原理 事务隔离 隔离性与隔离级别 当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读 (non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有 了“隔离级别”的概念 在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时候,我们都要在二者之间寻找一个平衡点 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当 出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行 在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。 在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。 在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的。这里需要注意的是, “读未提交”隔离级别下直接返回记录上的最新值,没有视图概念; 而“串行化”隔离级别下直接用加锁的方式来避免并行访问 事务隔离的实现

hibernate一级缓存和二级缓存的区别

空扰寡人 提交于 2020-02-25 01:49:10
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。   缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。   Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句

Hibernate学习之Hibernate一级缓存和二级缓存

百般思念 提交于 2020-02-25 01:48:25
一级缓存和二级缓存 缓存概念   缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。   Hibernate的缓存包括 Session的缓存和SessionFactory的缓存 ,其中SessionFactory缓存又可以分为两类:内置缓存和外置缓存。 Session缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。 SessionFactory 的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一 些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件

Hibernate缓存原理与策略 Hibernate缓存原理:

可紊 提交于 2020-02-25 01:44:55
Hibernate缓存原理 : 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法. 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间.ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用,从而避免了数据库调用性能的开销.而相对内存操作而言,数据库调用是一个代价高昂的过程. 一般来讲ORM中的缓存分为以下几类: 1: 事务级缓存 :即在当前事务范围内的数据缓存.就Hibernate来讲,事务级缓存是基于Session的生命周期实现的,每个Session内部会存在一个数据缓存,它随着 Session的创建而存在,随着Session的销毁而灭亡,因此也称为Session Level Cache. 2: 应用级缓存 :即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享(数据库事务或应用事务),事务之间的缓存共享策略与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存由SessionFactory实现

Spring事务管理之几种方式实现事务(转)

我怕爱的太早我们不能终老 提交于 2020-02-25 00:30:35
转自 一:事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销。Spring事务管理基于底层数据库本身的事务处理机制。数据库事务的基础,是掌握Spring事务管理的基础。这篇总结下Spring事务。 事务具备ACID四种特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。 (1)原子性(Atomicity)     事务最基本的操作单元,要么全部成功,要么全部失败,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。   (2)一致性(Consistency)     事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。   (3)隔离性(Isolation)     指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态