首先数据库的特性就是 ACID;

Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败

Consistency 一致性:在事务开始和结束前,要保持一致性状态

Isolation 隔离性: 对于同一个表的操作,每个事务都是单独的,不会影响其他事务。

Durability 持久性: 事务一旦提交,数据库中的数据就是永久的了。

对于以上四种特性中的隔离性,不同的策略会有不同的弊端:脏读,不可重复读,幻读。

脏读: 就是一个事务读取了别的事务执行过程中未提交的数据。

不可重复读: 就是一个事务正在操作的数据被别的事务给修改了。对于一下脏读是有区别的。

幻读: 就是一个事务刚更新了一批数据,还未提交,准备提交 时,突然又插入了一条数据,这就幻读。

具体对应什么策略呢:未提交读,已提交读,可重复读,可序列化

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE

策略是什么意思呢?

未提交读: 就是两个事务A和B,在A中可以读到B中未提交 的数据,这种隔离级别是最低的,因为会有脏数据,这种级别也只是在理论层面

提交读: 就是两个事务A和B,只有A事务提交了B才可以读到,这种级别避免了脏数据,但会存在不可重复读,Oracle默认的隔离级别。

可重复读:就是两个事务A和B,在A的事务中读取B中已提交的事务,A事务中的数据是不变的。但是在A提交时,会对比最新的数据,并更新。mysql的默认隔离级别。

可序列化: 还是两个事务,A操作数据库时,B只能等着。相当于串行。

理解了上面的理论,如何修改策略呢

1.修改mysql的配置文件my.ini

#– READ-UNCOMMITTED – READ-COMMITTED – REPEATABLE-READ – SERIALIZABLE
[mysqld]
transaction-isolation = REPEATABLE-READ

2.通过命令

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
以上两个为会话级别,下面是全局级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

spring中的传播机制的理解:

一共七个,一个个说也记不住 ,我们来假设情况:

两种情况 ,一种当前没有事务,一种是当前有事务

spring传播机制 当前没有事务 当前有事务
REQUIRED 新建一个事务 加入这个事务中
SUPPORTS 以非事务方式执行 加入
MANDATORY 抛出异常 加入
REQUIRES_NEW 新建 挂起就建
NOT_SUPPORTED 以非事务运行 挂起,非事务运行
NEVER 以非事务运行 抛出异常
NESTED 执行 嵌套事务内执行

spring中的隔离级别:

  • 隔离级别 含义
    ISOLATION_DEFAULT 使用数据库默认的事务隔离级别
    ISOLATION_READ_UNCOMMITTED 允许读取尚未提交的修改,可能导致脏读、幻读和不可重复读
    ISOLATION_READ_COMMITTED 允许从已经提交的事务读取,可防止脏读、但幻读,不可重复读仍然有可能发生
    ISOLATION_REPEATABLE_READ 对相同字段的多次读取的结果是一致的,除非数据被当前事务自生修改。可防止脏读和不可重复读,但幻读仍有可能发生
    ISOLATION_SERIALIZABLE 完全服从ACID隔离原则,确保不发生脏读、不可重复读、和幻读,但执行效率最低。

数据库的特性与隔离级别和spring事务的传播机制和隔离级别的更多相关文章

  1. Spring事务:传播行为与隔离级别

    文章主要来源:https://github.com/dengdaiyemanren/onetopiconeday/wiki/spring%E4%BA%8B%E5%8A%A1%E9%85%8D%E7%B ...

  2. Spring事务之传播机制

    Spring事务传播机制:Spring在TransactionDefinition接口中规定了种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套时事务如何进行传播.即协调已经有事务标识的方法之 ...

  3. spring事务的传播机制新解

    以下是事物的传播机制: @Transactional(propagation=Propagation.REQUIRED)如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)@Transacti ...

  4. Spring事务的传播行为和隔离级别

    事物注解方式: @Transactional [一]传播行为: 使用方法:@Transactional(propagation=Propagation.REQUIRED) Require:支持当前事务 ...

  5. spring事物传播机制与隔离级别

    转载自:http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html7个传播行为,4个隔离级别, Spring事务的传播行为和隔 ...

  6. 事务、事务特性、事务隔离级别、spring事务传播特性

    事务.事务特性.事务隔离级别.spring事务传播特性   1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...

  7. spring 中常用的两种事务配置方式以及事务的传播性、隔离级别

    一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...

  8. Spring事务传播机制与隔离级别(转)

    Spring事务传播机制与隔离级别 博客分类: Spring   转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...

  9. spring 事务配置方式以及事务的传播性、隔离级别

    在前面的文章中总结了spring事务的5中配置方式,但是很多方式都不用而且当时的配置使用的所有参数都是默认的参数,这篇文章就看常用的两种事务配置方式并信息配置事务的传播性.隔离级别.以及超时等问题,废 ...

随机推荐

  1. iView 实战系列教程(21课时)_2.iView 实战教程之导航、路由、鉴权篇

    在c盘创建一个iview-router的项目 . 然后使用默认的配置 跳过 添加vue-router的插件 编译我们的文件. 编译好之后,我们启动App 默认的页面就打开了. 默认两个路由一个是abo ...

  2. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_16-ArrayList练习一_存储随机数

    循环6次就是6.fori 循环子在外部+1就是得到的1到33的数字 list.fori遍历集合 自动生for循环的代码

  3. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_10 斗地主案例(双列)_1_斗地主案例的需求分析

    之前做的斗地主的版本,没有从小到大进行排序 一个存储牌的花色,一个存储牌的序号. 放牌的容器.使用Map 再创建一个集合进行洗牌. 调用shuffer方法洗牌.生成后就是随即的索引了.

  4. 16/7/8_PHP-字符串介绍

    不知道为什么慕课网还这个都要介绍.不过还是一个新的知识点. PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号2.双引号3 ...

  5. 【HANA系列】SAP HANA DB 和SAP HANA studio version查看

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA DB 和SAP ...

  6. 【BASIS系列】SAP /usr/sap//DVEBMGS00满了怎么处理

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP /usr/sap//D ...

  7. clinical-逻辑核查数据的操作

    1. 前端页面样式 2. 前端代码 添加: 展示: 修改 删除 3. 后台代码 封装的DAO类数据 # coding: utf-8 from pdform.services.db.dbCore imp ...

  8. rac节点挂掉后,vip飘到别的节点,但是业务连接不上报 no listener问题处理

    客户一套rac系统,三节点,其中一个节点的p260主机主板有问题(经常机器重启,好像是这个型号的通病,主板被炒到20W),临时把故障节点的vip作为业务地址用. 首先,查看确定故障节点vip飘到那个节 ...

  9. SSM003/构建Maven单模块项目(二)

    一.Controller基础代码(mooc) 1.UserController.java /** *springmvc1-2:返回jsp页面 * 请求URL: /user/getUserById?us ...

  10. Spring MVC-学习笔记(3)参数绑定注解、HttpMessageConverter<T>信息转换、jackson、fastjson、XML

    1.参数绑定注解 1>@RequestParam: 用于将指定的请求参数赋值给方法中的指定参数.支持的属性: 2>@PathVariable:可以方便的获得URL中的动态参数,只支持一个属 ...