数据库的事务级别介绍与操作
关系型数据库都具有一套事务级别,以前的开发和学习过程我很少关注过这个概念,今天搜集了一些资料,在
结合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,如需转载请自行联系原作者
数据库的事务级别介绍与操作相关推荐
- 数据库 事务级别介绍
数据库 事务级别介绍 2个概念:事务,锁. 事务:逻辑单元内的一系列操作,要么全部完成执行,要么全部不执行. 锁:将某数据的操作加锁,则其他人无法获取当前数据的当前操作.避免单位时间内的数据覆盖,影响 ...
- 数据库的隔离级别介绍
数据库的隔离级别介绍: 隔离级别的作用是能够保证多个线程同时操作一个数据时的正确性. 1.读未提交:当你修改或者增加了一个数据,没有进行提交导致的脏读,重复读,幻读等. (备注:黑色窗口表示窗口一:白 ...
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- MySQL事务隔离级别和Spring事务关系介绍
事务隔离级别介绍 隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeat ...
- mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
本文主要向大家介绍了SQLServer数据库:事务与隔离级别实例讲解,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 上班途中,你在一处ATM机前停了下来.正当你在敲入密码 ...
- mysql数据库执行事务日志_第十章 MySQL事务及其日志介绍
一.数据库升级 #1.提出方案 1)升级的方法 2)升级的步骤 3)升级的时间 4)升级步骤可能会出现的问题 5)出现的问题怎么解决,解决时间 6)升级后出现的问题 #2.搭建新的数据库 #3.备份就 ...
- MySQL数据库事务基本介绍、四大特征、隔离界别的使用方法
1.事务的基本介绍 1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败. 2.操作: 1.开启事务:start transaction; 2.回滚:roll ...
- 4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别
事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点:要么都成功,要么都失败 事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作, 否则出现:脏读 不可重复读 幻 ...
- 使用JDBC进行数据库的事务操作(2)
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
最新文章
- java求阶乘不内存溢出_No_16_0321 Java基础学习第二十一天
- 遥感图像处理-阴影检测
- 技术解析系列 阿里 PouchContainer 资源管理探秘
- 基于fiddler的网络爬虫校园网自动登陆系统
- 狼奔权限管理系统[开源]
- 知识图谱之语言计算与信息抽取
- 网络基础:ACL访问控制例表
- 最佳实践 —— 单元测试
- ffmpeg命令基本语法和常见命令
- 数字电子技术基础阎石老师第五版课后习题解答-很抱歉,其实才写了两道题,大家不要误点进来耽误时间了。但是开始写了又不想删掉,希望日后能补起来吧。
- 怎么将多张图片批量转为 Word 、Excel 、PPT 、PDF 等文档格式
- 子平真诠释疑笔记(五)
- 宇宙最全面试题目实录(二)
- C#windows竞赛管理系统
- 利用 Python 进行数据分析 (一):IPython 及 Jupyter notebook
- 拼多多:拼多多店铺怎么快速引流?方法介绍
- 均衡教育计算机室整改方案,义务教育均衡发展工作存在的问题整改方案.docx
- 【疫情分析--数据采集】
- 阿里云服务器配置参数详细说明文档
- Navicat11 for mysql(包括激活工具)亲测可用
热门文章
- java 限制参数类型_java定义受限制的类型参数操作
- ncnn:提取所有层特征值
- MongoDB分组查询,聚合查询,以及复杂查询
- CocosPods 引入项目,哪些文件需要上传到服务器呢?
- sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...
- Java工具类DateFormatUtils详解
- JSON 数据重复 出现$ref
- Mysql - 安装与配置
- CreateProcess
- Exercise 12: Prompting People