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事物(一)事务隔离级别和事物并发冲突

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

MySQL事务隔离级别详解

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

关于Mysql事务REPEATABLE_READ隔离级别下多版本并发控制(MVCC)重复读产生的坑的你踩过么?

前几天在系统中开发一个活动, 使用了行级锁,但是却在并发测试下出现了重大的Bug,话不多说, 直接开始. 事务的隔离级别是Mysql默认的REPEATABLE_READ. Time1: 事务A...
  • Mr_rain
  • Mr_rain
  • 2016年07月08日 11:31
  • 1678

详解数据库中的事务、隔离级别、并发控制

一、什么是事务(Transaction)?  事务就是一组原子性的SQL查询,或者说一个独立的工作单元。下面我们通过一个银行用户之间的转账这个经典的例子来理解事务。 假设一个银行的数据库中有两张表...
  • u010330043
  • u010330043
  • 2016年04月29日 17:04
  • 532

高性能MySql学习笔记——锁、事务、隔离级别

为什么需要锁? 因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操...
  • Sandeldeng
  • Sandeldeng
  • 2016年10月17日 09:30
  • 254

高性能MySQL学习笔记(4) —— 事务隔离级别

事务隔离级别事务的ACID属性中的隔离性,如何实现呢?在SQL标准中定义了四种隔离级别。 但要注意,标准中定义的这四个级别,在实际上各个存储引擎的实现是不尽相同的,有些细节地方还是不一样的,学习的时...
  • a327369238
  • a327369238
  • 2016年10月13日 16:40
  • 384

[Mysql]——通过例子理解事务的4种隔离级别

[Mysql]——通过例子理解事务的4种隔离级别 第1级别:Read Uncommitted(读取未提交内容)第2级别:Read Committed(读取提交内容)第3级...
  • Eric_splendid
  • Eric_splendid
  • 2018年01月11日 18:26
  • 35

[Mysql]——事务的4种隔离级别

[Mysql]——事务的4种隔离级别SQL标准定义了4种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。...
  • kingscoming
  • kingscoming
  • 2017年12月19日 16:00
  • 28

高性能MySql学习笔记——锁、事务、隔离级别

为什么需要锁? 因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并...
  • zhaoliang831214
  • zhaoliang831214
  • 2016年05月17日 09:56
  • 235

Mysql——通过例子理解事务的4种隔离级别

第1级别:Read Uncommitted(读取未提交内容)第2级别:Read Committed(读取提交内容)第3级别:Repeatable Read(可重读)第4级别:Seriali...
  • lby0307
  • lby0307
  • 2017年11月15日 21:25
  • 22
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL并发控制——事务与事务隔离级别详解
举报原因:
原因补充:

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