MySQL并发控制——事务与事务隔离级别详解

原创 2016年06月01日 11:54:43

一、首先了解什么是事务

1、事务概念:事务是包含了一组有序的数据库操作命令的序列,它是数据库并发操作的最小控制单位。

2、事务特性:原子性:事务包含的数据库操作命令要么都执行,要么都不执行。

一致性:当事务完成时,数据库处于稳定而一致的状态。即事务执行后,数据库数据要符合规定,而且所有数据查询        的结果是一致的。

隔离性:多个事务同时执行时,他们之间是互不干扰的。

永久性:一旦事务提交成功,它引发的变化也就永久保存了下来,硬件与应用程序发生错误也不能改变。

3、事务状态:

4、事务操作命令

         


二、在并发执行事务时会发生什么问题呢?


1、丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖事务A和B并发执行,A事务执行更新后,提交;B事务在A事务更新后,B事务结束前也做了对该行数据的更新操作,然后回滚,则两次更新操作都丢失了)。


2、脏读:一个事务读到另一个事务未提交的更新数据(事务A和B并发执行,B事务执行更新后,A事务查询B事务没有提交的数据,B事务回滚,则A事务得到的数据不是数据库中的真实数据。也就是脏数据,即和数据库中不一致的数据)。


3、不可重复读:一个事务读到另一个事务已提交的更新数据(事务A和B事务并发执行,A事务查询数据,然后B事务更新该数据,A再次查询该数据时,发现该数据变化了)。


4、覆盖更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据(即A事务更新数据,然后B事务更新该数据,A事务查询发现自己更新的数据变了)。


5、虚读(幻读):一个事务读到另一个事务已提交的新插入的数据(A和B事务并发执行,A事务查询数据,B事务插入或者删除数据,A事务再次查询发现结果集中有以前没有的数据或者以前有的数据消失了)。

三、数据库系统提供了四种事务隔离级别供用户选择

1、Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新(事务执行的时候不允许别的事务并发执行。事务串行化执行,事务只能一个接着一个地执行,而不能并发执行。)。

2、Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。

3、Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。

4、Read Uncommitted(读未提交数据):一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。

 

 

丢失更新

脏读

非重复读

覆盖更新

幻像读

未提交读

Y

Y

Y

Y

Y

已提交读

N

N

Y

Y

Y

可重复读

N

N

N

N

Y

串行化

N

N

N

N

N





 


 



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MySQL数据库事务隔离级别(Transaction Isolation Level)

今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用。 数据库隔离级别有四种,应用《高性能mysql》一书中的说明: ...

Mysql事务隔离级别与锁

数据库的事务有几种特性,例如一致性和隔离性,一般通过加锁来实现。同时数据库又是一个高并发的应用,如果加锁过度或者不当将严重影响性能。数据库提供了几种隔离级别来供选择,本文通过解析InnoDB的加锁机制...

查询mysql事务隔离级别

1.查看当前会话隔离级别   select @@tx_isolation;   2.查看系统当前隔离级别   select @@global.tx_isolation;   3.设置当...

MySQL事务隔离级别详解

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(读...

MySQL事务隔离级别以及MVCC机制

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(读...

MySQL事物(一)事务隔离级别和事物并发冲突

我们对数据库的操作通常为写和读,就是所说的CRUD:增加(Create)、读取(Read)、更新(Update)和删除(Delete)。 事务就是一件完整要做的事情。 事务是恢复和并发控制的基本单位。...

mysql锁研究系列四(事务在并发情况下避免超卖)

我们在做电商的时候会考虑到一个问题,如果此时库存就剩一个,而来了两个并发同时下单,如何避免库存超卖? 先贴一段代码: beginTranse(开启事务) $sql = "select ...

mysql处理高并发,防止库存超卖

今天王总又给我们上了一课,其实mysql处理高并发,防止库存超卖的问题,在去年的时候,王总已经提过;但是很可惜,即使当时大家都听懂了,但是在现实开发中,还是没这方面的意识。今天就我的一些理解,整理一下...

Mysql事务,并发问题,锁机制

本文转自:http://www.cnblogs.com/fidelQuan/p/4549068.html 1、什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点。 原子性...

深入理解Mysql——锁、事务与并发控制(辟谣)

mysql用的时间也不短了,但从没有做过总结。今天就来总结一下吧mysql服务器逻辑架构每个连接都会在mysql服务端产生一个线程(内部通过线程池管理线程),比如一个select语句进入,mysql首...
  • lemon89
  • lemon89
  • 2016年05月23日 00:21
  • 3361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL并发控制——事务与事务隔离级别详解
举报原因:
原因补充:

(最多只允许输入30个字)