关系型数据库都具有一套事务级别,以前的开发和学习过程我很少关注过这个概念,今天搜集了一些资料,在

结合spring声明式事务学习的同时,总结一下数据库的事务级别与操作。

READ-UNCOMMITTED: 未提交读 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )

READ-COMMITTED: 提交读 会出现不可重复读、幻读问题(锁定正在读取的行)

REPEATABLE-READ: 可重复读 会出幻读(锁定所读取的所有行)

SERIALIZABLE: 序列化 保证所有的情况不会发生(锁表)

详细说明:

未提交读——这通常称为 'dirty read':non-locking SELECT 的执行使我们不会看到一个记录的可能更早的版本;
因而在这个隔离级别下是非 'consistent' reads;这级隔离级别的运作如同 READ COMMITTED。处于这个隔离级的
事务可以读到其他事务还没有提交的数据。如果这个事务使用其他事务未提交的变化作为计算的基础,然后那些未
提交的变化被他们的父事务撤销,则会导致误差。

提交读——在一个事务中已经COMMIT的数据可以在其他事务中看到。如果这个事务频繁提交的话,其他的大的查询
事务中可能会得到多个不同的结果。

可重复读——这是 InnoDB 默认的事务隔离级。在一个事务中所有读都是连续的。

序列化——提供最大程度的隔离,如果每个事务都以这种隔离级运行就会影响Mysql的性能,因为需要大量的资源来
使大量事务在任一时刻不被看到。如果一个事务在执行一个SELECT操作,另外的事务不允许执行UPDATE操作,这个
隔离级别下的SELECT操作被阴式地转换为 SELECT ... LOCK IN SHARE MODE。

不可重复读的重点是修改 : 
同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了 
幻读的重点在于新增或者删除 
同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样

MySQL InnoDB存储引擎的事务隔离级别

查看InnoDB系统级别的事务隔离级别:

以下为引用的内容: 
mysql> SELECT @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ   |
+-----------------------+
1 row in set (0.00 sec)

查看InnoDB会话级别的事务隔离级别:

以下为引用的内容: 
mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

修改事务隔离级别:

以下为引用的内容: 
mysql> set global transaction isolation level read committed;

  Query OK, 0 rows affected (0.00 sec)

  mysql> set session transaction isolation level read committed;

  Query OK, 0 rows affected (0.00 sec)

InnoDB的可重复读隔离级别和其他数据库的可重复读是有区别的,不会造成幻象读(phantom read),所谓幻象读,

就是同一个事务内,多次select,可以读取到其他session insert并已经commit的数据。下面是一个小的测试,证明

InnoDB的可重复读隔离级别不会造成幻象读。测试涉及两个session,分别为session 1和session 2,隔离级别都是

repeateable read,关闭autocommit

以下为引用的内容:

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

  mysql> set autocommit=off;

  Query OK, 0 rows affected (0.00 sec)

  session 1 创建表并插入测试数据

  mysql> create table test(i int) engine=innodb;

  Query OK, 0 rows affected (0.00 sec)

  mysql> insert into test values(1);

  Query OK, 1 row affected (0.00 sec)

  session 2 查询,没有数据,正常,session1没有提交,不允许脏读

  mysql> select * from test;

  Empty set (0.00 sec)

  session 1 提交事务

  mysql> commit;

  Query OK, 0 rows affected (0.00 sec)

  session 2 查询,还是没有数据,没有产生幻象读

  mysql> select * from test;

  Empty set (0.00 sec)

以上试验版本:

mysql> select version();
+-------------------------+c
| version()       |
+-------------------------+
| 5.0.37-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)

spring的声明式事务的隔离级别与数据库的如出一辙,共5种级别:

1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
      另外四个与JDBC的隔离级别相对应
 2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
      这种隔离级别会产生脏读,不可重复读和幻像读。
 3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
 4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
      它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
 5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
      除了防止脏读,不可重复读外,还避免了幻像读。

本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2009/02/11/1388519.html,如需转载请自行联系原作者

数据库的事务级别介绍与操作相关推荐

  1. 数据库 事务级别介绍

    数据库 事务级别介绍 2个概念:事务,锁. 事务:逻辑单元内的一系列操作,要么全部完成执行,要么全部不执行. 锁:将某数据的操作加锁,则其他人无法获取当前数据的当前操作.避免单位时间内的数据覆盖,影响 ...

  2. 数据库的隔离级别介绍

    数据库的隔离级别介绍: 隔离级别的作用是能够保证多个线程同时操作一个数据时的正确性. 1.读未提交:当你修改或者增加了一个数据,没有进行提交导致的脏读,重复读,幻读等. (备注:黑色窗口表示窗口一:白 ...

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

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

  4. MySQL事务隔离级别和Spring事务关系介绍

    事务隔离级别介绍 隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeat ...

  5. mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解

    本文主要向大家介绍了SQLServer数据库:事务与隔离级别实例讲解,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 上班途中,你在一处ATM机前停了下来.正当你在敲入密码 ...

  6. mysql数据库执行事务日志_第十章 MySQL事务及其日志介绍

    一.数据库升级 #1.提出方案 1)升级的方法 2)升级的步骤 3)升级的时间 4)升级步骤可能会出现的问题 5)出现的问题怎么解决,解决时间 6)升级后出现的问题 #2.搭建新的数据库 #3.备份就 ...

  7. MySQL数据库事务基本介绍、四大特征、隔离界别的使用方法

    1.事务的基本介绍 1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败. 2.操作: 1.开启事务:start transaction; 2.回滚:roll ...

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

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

  9. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

最新文章

  1. java求阶乘不内存溢出_No_16_0321 Java基础学习第二十一天
  2. 遥感图像处理-阴影检测
  3. 技术解析系列 阿里 PouchContainer 资源管理探秘
  4. 基于fiddler的网络爬虫校园网自动登陆系统
  5. 狼奔权限管理系统[开源]
  6. 知识图谱之语言计算与信息抽取
  7. 网络基础:ACL访问控制例表
  8. 最佳实践 —— 单元测试
  9. ffmpeg命令基本语法和常见命令
  10. 数字电子技术基础阎石老师第五版课后习题解答-很抱歉,其实才写了两道题,大家不要误点进来耽误时间了。但是开始写了又不想删掉,希望日后能补起来吧。
  11. 怎么将多张图片批量转为 Word 、Excel 、PPT 、PDF 等文档格式
  12. 子平真诠释疑笔记(五)
  13. 宇宙最全面试题目实录(二)
  14. C#windows竞赛管理系统
  15. 利用 Python 进行数据分析 (一):IPython 及 Jupyter notebook
  16. 拼多多:拼多多店铺怎么快速引流?方法介绍
  17. 均衡教育计算机室整改方案,义务教育均衡发展工作存在的问题整改方案.docx
  18. 【疫情分析--数据采集】
  19. 阿里云服务器配置参数详细说明文档
  20. Navicat11 for mysql(包括激活工具)亲测可用

热门文章

  1. java 限制参数类型_java定义受限制的类型参数操作
  2. ncnn:提取所有层特征值
  3. MongoDB分组查询,聚合查询,以及复杂查询
  4. CocosPods 引入项目,哪些文件需要上传到服务器呢?
  5. sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...
  6. Java工具类DateFormatUtils详解
  7. JSON 数据重复 出现$ref
  8. Mysql - 安装与配置
  9. CreateProcess
  10. Exercise 12: Prompting People