*博客搬家:初版发布于 2017/04/10 00:37    原博客地址:https://my.oschina.net/sunqinwen/blog/875833

数据库事务的隔离级别

讲事务的隔离级别之前,先来介绍一下数据库事务的几个特性:

(1)原子性

最基本的特性,意思是在一个事务内里所有关于数据库的操作,要么全部成功,要么全部失败;成功时意味着本次操作所有数据库相关的写操作全部持久化,无法更改,失败意味着本次操作相对于操作前对数据库没有任何影响和改变。

(2)一致性

指的是一次完整的事务必须将数据库的一个一致状态转变到另外一个一致状态。

一致性写:

例如:事务A要做的操作是将A、B、C三个记录修改为D、E、F,那么A、B、C----->D、E、F的过程就满足了事务一致性,但是如果出现类似:A、B、C---->D、E、C(A、B修改成功,但是C未修改)则认定违背了事务的一致性,简单理解一致性就是指事务的“初始状态”到“修改完成状态”与“目标状态一致”。

一致性读:

事务A在某一刻发起查询请求,那么查询结果是以那一刻为准,保证了数据在查询一刻的一致性。

(3)持久性

指一次事务的成功提交对数据库造成的修改是永久性的。

(4)隔离性

当多个用户并发访问数据库时,数据库为每一个用户开启的事务不可以被其他事务所影响,也就是说并发事务间要相互独立不受到干扰。关于隔离性分了集中隔离等级,本篇文章将详细介绍这几种隔离等级。

下面来讲下事务隔离级别:

(1)Read Uncommitted(读未提交)

这个隔离级别下未被提交的事务下所做的任何操作都可以被其他事务所读取到,这时候会造成数据的脏读、幻读、不可重复读问题。

(2)Read Committed(读已提交)

这个隔离级别下未被提交的操作不可以被其他事务所读取到,简单来讲就是单个事务里的内容在事务成功提交之前,是不会被其他事务所读取(发现)到的,但是这样同样会出现幻读、不可重复读现象。

举个栗子:事务T1要对C表做添加操作,同时事务T2里要读取C表,T2第一次读取C表时返回1条数据,这时T1执行完毕,那么T2如果再次取一次C表数据就会发现多出一条数据。

(3)Repeatable Read(可重读)

Mysql默认的隔离级别,这个隔离级别下同一事务读取到的数据一致(简单点说就是T1一旦开始,读取到数据如果中间被T2修改,那么T1再次读取该数据是和第一次读取时一样的),因此,在该隔离级别下,不会造成脏读、不可重复读,但依旧会造成幻读现象。

(4)Serializable(串行化)

最高隔离级别,会为每个事务排序(为每条数据都加上锁),使之执行串行化,不可能产生冲突,因此解决了脏读、幻读、不可重复读问题,但是会造成锁竞争甚至超时,一般不会采用这种极端的隔离机制。

事务并发过程中产生的问题介绍:

(1)脏读

一个事务读取到了另外一个事务中未提交的数据。

(2)不可重复读

一个事务读取到了另外一个事务中提交的修改掉的数据。

(3)幻读

一个事务读取到了另外一个事务中添加的数据。

Tip:不可重复读和幻读的区别在于着重点一个是update,一个是insert

总结四种隔离级别所造成和避免的问题,请先看以上内容后再看此表:

隔离级别 脏读 不可重复读 幻读
Read Uncommitted
Read Committed
Repeatable Read
Serializable

「DB」数据库事务的隔离级别的更多相关文章

  1. MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)

    本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...

  2. Mysql数据库事务的隔离级别和锁的实现原理分析

    Mysql数据库事务的隔离级别和锁的实现原理分析 找到大神了:http://blog.csdn.net/tangkund3218/article/details/51753243 InnoDB使用MV ...

  3. Spring中事务的传播行为,7种事务的传播行为,数据库事务的隔离级别

    Propagation.REQUIRED 代表当前方法支持当前的事务,且与调用者处于同一事务上下文中,回滚统一回滚(如果当前方法是被其他方法调用的时候,且调用者本身即有事务),如果没有事务,则自己新建 ...

  4. MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转载)

    http://www.imooc.com/article/17290 http://www.51testing.com/html/38/n-3720638.html https://dev.mysql ...

  5. MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转)

    本文转自https://m.imooc.com/article/details?article_id=17290 感谢作者 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理 ...

  6. 数据库事务ACID/隔离级别

    参考博客 1. 事务的定义 事务是用户定义的一个数据库操作序列.这些操作要么全执行,要么全不执行,是一个不可分割的工作单元.在关系型数据库中,事务可以是一条SQL语句,也可以是一组SQL语句或整个程序 ...

  7. 通过pymysql程序debug学习数据库事务、隔离级别

    问题 今天在使用pymysql连数据库的时候,出现了一个bug,查询数据库某个数据,但是在我在数据库中执行sql语句改变数据后,pymsql的查询依然没有发生改变. 代码如下: # 5.6.10 co ...

  8. Mysql数据库事务及隔离级别学习测试

    参考了这篇文章的一些内容: http://xm-king.iteye.com/blog/770721 记住以下这张表: 我在springdemo库里面建了一个表: CREATE TABLE `tx` ...

  9. MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)

    本文转自https://m.imooc.com/article/details?article_id=17289 感谢作者 上节回顾 上两篇记录了我对MySQL 事务 隔离级别read uncommi ...

随机推荐

  1. Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  2. CENTOS7 YUM安装BOOST1.53(静态版本)

    按照之前的博文更新163的源之后,执行: yum install boost-static.i686 yum install boost-devel.i686 yum install boost-do ...

  3. [GO]方法集

    指针变量的方法集 package main import "fmt" type Person struct { name string sex byte age int } fun ...

  4. java IO之File基本操作

    public static void main(String[] args) { // TODO Auto-generated method stub //"G:\\JAVA\\test\\ ...

  5. lshw查看系统硬件信息

    lshw(Hardware Lister)是另外一个可以查看硬件信息的工具,不仅如此,它还可以用来做一些硬件的benchmark. lshw is a small tool to extract de ...

  6. SciTE编写lua的快捷键整理

    SciTE快捷键整理 常用键整理: Ctrl + Q: 多行注释 Ctrl + L:删除一行或多行 Ctrl+T :和上一行换位置 Ctrl+D :复制高亮选中字符. 如果没有高亮选择字符, 则复制光 ...

  7. C和C++中的异常处理

    1.简介 许多的编程新手对异常处理视而不见,程序里很少考虑异常情况.一部分人甚至根本就不考虑,以为程序总是能以正确的途径运行.譬如我们有的程序设计者调用fopen打开一个文件后,立马就开始进行读写操作 ...

  8. spring boot 整合 HttpClient

    第一步:引入HttpClient 的jar包 1.httpClient 5.0 开始支持异步(Async)请求: 2.httpclient 版本过低上传文件会出,原因是 org.apache.http ...

  9. windows包管理工具和 ssh安装

    Chocolatey windows下的包管理工具 https://chocolatey.org/ cmd里执行 @"%SystemRoot%\System32\WindowsPowerSh ...

  10. Backup--压缩备份和数据库压缩

    1> 即使数据库启用了页压缩或行压缩,压缩备份也可以有效减小备份的大小,压缩备份的压缩效率取决于表中的数据类型 2> 数据库压缩有利于降低备份时间(因为数据库变小) 3> 对已启用压 ...