数据库的特性与隔离级别和spring事务的传播机制和隔离级别
首先数据库的特性就是 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事务的传播机制和隔离级别的更多相关文章
- Spring事务:传播行为与隔离级别
文章主要来源:https://github.com/dengdaiyemanren/onetopiconeday/wiki/spring%E4%BA%8B%E5%8A%A1%E9%85%8D%E7%B ...
- Spring事务之传播机制
Spring事务传播机制:Spring在TransactionDefinition接口中规定了种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套时事务如何进行传播.即协调已经有事务标识的方法之 ...
- spring事务的传播机制新解
以下是事物的传播机制: @Transactional(propagation=Propagation.REQUIRED)如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)@Transacti ...
- Spring事务的传播行为和隔离级别
事物注解方式: @Transactional [一]传播行为: 使用方法:@Transactional(propagation=Propagation.REQUIRED) Require:支持当前事务 ...
- spring事物传播机制与隔离级别
转载自:http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html7个传播行为,4个隔离级别, Spring事务的传播行为和隔 ...
- 事务、事务特性、事务隔离级别、spring事务传播特性
事务.事务特性.事务隔离级别.spring事务传播特性 1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...
- Spring事务传播机制与隔离级别(转)
Spring事务传播机制与隔离级别 博客分类: Spring 转自:http://blog.csdn.net/edward0830ly/article/details/7569954 (写的不错) ...
- spring 事务配置方式以及事务的传播性、隔离级别
在前面的文章中总结了spring事务的5中配置方式,但是很多方式都不用而且当时的配置使用的所有参数都是默认的参数,这篇文章就看常用的两种事务配置方式并信息配置事务的传播性.隔离级别.以及超时等问题,废 ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_8_字符串的分割方法
使用空格分割 这个参数其实是个正则表达式 如果用英文的句号来切分就会有问题.. 没有输出任何东西 输出他的长度看下 数组的长度输出为0 注意事项:
- Bootstrap 学习笔记 项目实战 响应式导航栏
导航代码HTML: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...
- 剑指offer--day05
1.1 题目:二进制中1的个数:输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 1.2 解题思路:通过位移来进行.举例:7(二进制:0111),7 >> 1(得到:001 ...
- Node.js实战13:fs模块奥义!开发一个数据库。
本文,将使用fs开发一种简单的文件型数据库. 数据库中,记录将采用JSON模式,内容型如: {"key":"a","value":" ...
- using 用法拾忆
using 用法主要包括三种: 1.引用外部命名空间以及外部命名空间中定义的类型(指令) 2.创建命名空间别名,避免因名称相同造成的冲突(指令) 3.定义资源使用范围,在范围结束后释放资源对象(语句) ...
- Spring Boot 集成 Ehcache 缓存,三步搞定!
作者:谭朝红 www.ramostear.com/articles/spring_boot_ehcache.html 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序 ...
- [BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap)
[BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap) 题面 给出一个长度为n的字符串,m个操作,字符串仅包含小写英文字母 操作1:在k ...
- HDU-2068 RPG的错排(组合, 错排)
RPG的错排 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Mysql共享锁、排他锁、悲观锁、乐观锁
一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--间隙锁( ...
- 说明一下 os.path 和 sys.path 分别代表什么?
os.path 主要是用于对系统路径文件的操作. sys.path 主要是对Python解释器的系统环境参数的操作(动态的改变Python解释器搜索路径).