一、前言

本篇文章来自网络整理,很简单,但是很实用对于初级和中级工程师。

原创地址1:http://www.cnblogs.com/hollen/archive/2012/05/13/2498309.html

原创地址2:http://singo107.iteye.com/blog/1175084

原创地址3:http://www.jb51.net/article/38004.htm

二、事务隔离级别

2.1数据库隔离级别

四个级别与四种现象的关系是:首先尽收眼底!!!

英文

中文

更新丢失

脏读

不可重复读

幻读

Read Uncommited

读未提交

不会出现

会出现

会出现

会出现

Read Commited

读已提交

不会出现

不会出现

会出现

会出现

Repeatable Read

可重复读

不会出现

不会出现

不会出现

会出现

Serializable

串行化

不会出现

不会出现

不会出现

不会出现

2.2 Spring隔离级别

spring隔离级别 对应数据库隔离级别
 ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
ISOLATION_READ_UNCOMMITTED Read Uncommited
ISOLATION_READ_COMMITTED Read Commited
ISOLATION_REPEATABLE_READ Repeatable Read
ISOLATION_SERIALIZABLE Serializable
Read uncommitted 读未提交

公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是5000元整,非常高兴。可是不幸的是,领导发现发给singo的工资金额不对,是2000元,于是迅速回滚了事务,修改金额后,将事务提交,最后singo实际的工资只有2000元,singo空欢喜一场。

出现上述情况,即我们所说的脏读,两个并发的事务,“事务A:领导给singo发工资”、“事务B:singo查询工资账户”,事务B读取了事务A尚未提交的数据。

当隔离级别设置为Read uncommitted时,就可能出现脏读,如何避免脏读,请看下一个隔离级别。

Read committed 读提交

singo拿着工资卡去消费,系统读取到卡里确实有2000元,而此时她的老婆也正好在网上转账,把singo工资卡的2000元转到另一账户,并在singo之前提交了事务,当singo扣款时,系统检查到singo的工资卡已经没有钱,扣款失败,singo十分纳闷,明明卡里有钱,为何......

出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务A:singo消费”、“事务B:singo的老婆网上转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读。

大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。如何解决不可重复读这一问题,请看下一个隔离级别。

Repeatable read 重复读

当隔离级别设置为Repeatable read时,可以避免不可重复读。当singo拿着工资卡去消费时,一旦系统开始读取工资卡信息(即事务开始),singo的老婆就不可能对该记录进行修改,也就是singo的老婆不能在此时转账。

虽然Repeatable read避免了不可重复读,但还有可能出现幻读。

singo的老婆工作在银行部门,她时常通过银行内部系统查看singo的信用卡消费记录。有一天,她正在查询到singo当月信用卡的总消费金额(select sum(amount) from transaction where month = 本月)为80元,而singo此时正好在外面胡吃海塞后在收银台买单,消费1000元,即新增了一条1000元的消费记录(insert transaction ... ),并提交了事务,随后singo的老婆将singo当月信用卡消费的明细打印到A4纸上,却发现消费总额为1080元,singo的老婆很诧异,以为出现了幻觉,幻读就这样产生了。

注:Mysql的默认隔离级别就是Repeatable read。

Serializable 序列化

Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

三、mysql数据库引擎

一般现在都用mysql,所以我只列出mysql的数据引擎一些基础!!!

MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎:

ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。
    MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
    HEAP:HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。
    InnoDB:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL+API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。

MyISAM与InnoDB的区别
  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

Spring事务管理--(一)数据库事务隔离级别与mysql引擎基础讲解相关推荐

  1. 数据库 - 事务管理(ACID)隔离级别 事务传播行为

    转载自   数据库 - 事务管理(ACID)隔离级别 事务传播行为 总览: 事务的4大特性(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前 ...

  2. Spring JDBC-Spring事务管理之数据库事务基础知识

    概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...

  3. spring配置mysql事务管理_Spring 数据库事务管理机制

    要点1 Spring事务管理方法编程式事务(TransactionTemplate.PlatformTransactionManager) 声明式事务(配置式.注解式) 2 Spring 注解 @Tr ...

  4. Spring的事务管理和数据库事务相关知识

    1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.         比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...

  5. Spring事务处理,以及Spring事务的传播属性和隔离级别

    本文转自:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 事务的隔离级别:事务隔离级别用于处理多事务并发的情况,通常使用 ...

  6. 4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

     事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点:要么都成功,要么都失败 事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作, 否则出现:脏读  不可重复读  幻 ...

  7. mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean

    在银行系统的存取款过程中,当遇到对一个账户并发存取的时候,系统该如何处理比较好.可能不少人会想到线程同步,然而在应用层使用同步会导致对象锁定,大大影响并发效率.此时,充分利用数据库的事务隔离机制可以很 ...

  8. 数据库事务的四大特性以及隔离级别

    本篇文章主要介绍数据库事务的四大特性ACID,以及数据库的隔离级别. 事务 概念 事务指的是满足 ACID 特性的一系列操作.在数据库中,可以通过 Commit提交一个事务,也可以使用 Rollbac ...

  9. 数据库事务隔离级ORACLE数据库事务隔离级别介绍

    本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...

最新文章

  1. 并发测试mysql_Jmeter性能测试系列——结果分析与报告输出
  2. python画柱状图代码-Python绘制堆叠柱状图的实例
  3. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
  4. zabbix巡检脚本
  5. mac怎么配置php开发环境变量,Mac M1安装mnmp(Mac+Nginx+MySQL+PHP)开发环境
  6. JavaScript 造就年薪超过 10 万美元的开发者们!
  7. 3月2日 ESC CAN 比特率 波特率 带宽与容量 香农定理 奈奎斯特定理 信噪比
  8. c#oracle数组超出,急问:System.IndexOutOfRangeException: 索引超出了数组界限解决方案
  9. SpringBoot:使用Caffeine实现缓存
  10. python菜鸟教程python基础教程
  11. win7 安装 kb2999226补丁(安装vs2015 报错kb2999226)
  12. 如何用活字格定制监狱管理系统
  13. JS实现tic tac toe
  14. Win系统 - 苹果系统里的“提醒事项”可否同步到 Windows 系统中?
  15. 立创EDA安装ibom插件
  16. Java5分钟制作海报
  17. c程序设计语言k rpdf,《C程序设计语言》(KR)中文高清非扫描件
  18. 计算机英语 病毒 教案,计算机病毒及其防治教案.doc
  19. python一维表二维表转化
  20. MySQL_day03

热门文章

  1. ASP.NET之对称算法加密
  2. 线程基类的构建与代码实践
  3. 手机权限的一些问题记录
  4. Java_压缩与解压工具类
  5. .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度...
  6. 《软件工程方法与实践》—— 3.4 面向对象模型
  7. 网站安全登录 web应用安全登录 密码 防截获
  8. GDI+需要Dispose的对象(不断更新中)
  9. 转载:asp.net生成缩略图通用函数(支持多种生成方式)
  10. 如何让SiteMapPath使用指定路径指定名称的sitemap文件。