在事务并行处理背景下,不同的事务之间因数据共享的状态变化,存在着某种依赖/隔离影响。即事务隔离级别。

事务隔离级别,官网的解释在这里

InnoDB提供 SQL:1992 标准描述的所有四种事务隔离级别: READ UNCOMMITTED、 READ COMMITTED、 REPEATABLE READ和 SERIALIZABLE。
InnoDB默认的隔离级别是 REPEATABLE READ。

READ UNCOMMITTED(未提交读):即一个事务可以读到另一个事务未提交的“中间状态”数据。也叫脏读。好比A和B在画画,A想看看B的绘画结果,

但是B还没画完,A就拍照走了。实际B的画没有完成;A只是拿了一个中间状态。

READ COMMITTED(提交读):即一个事务不可读到另一个事务未提交的“中间状态”数据。可以避免脏读。但是会发生两次读到的数据不一致问题。

也叫不可重复读。还是A和B画画举例,A在B画画之前读一次,B画完后读一次。A读了两次读到了不同的内容(想当然)。

REPEATABLE READ(可重复读):对不可重复读的改进(可以看到改进在一条条升级)。即两次读到的内容一致。举例来说,即A开始读B的画,

B即交笔停笔不允许改了。不管A读几次结果都一样。直到A结束他的读(事务)。

可重复读仍会产生幻读问题。

幻读这里有点绕,和不可重复读有点像。都是两次读到了不同的结果。不同的是:不可重复读强调查询结果的值的改变,幻读强调查询结果的范围出现了变化,

比如某行数据上一次查询没有,这一次突然出现--这是幻读问题。

The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but returns a row the second time that was not returned the first time, the row is a “phantom” row.

SERIALIZABLE(可串行化):强制事务进行排序,将并行事务改串行,可以解决脏读,不可重复读,幻读的问题,但是需要加锁。不是很友好。

上面介绍了四种事务隔离级别和各隔离级别仍存在的问题,需要注意的是:READ UNCOMMITTED这种最低一级的隔离级别,相当于没有隔离,

实际应用中基本上不会用。SERIALIZABLE隔离级别会对每一行数据进行读写加锁,可能导致大量的超时和锁争用问题,实际应用中也很少用这个

隔离级别,除非接受没有并发,但我们也知道,基本不可能。

所以我们更多的讨论的是READ COMMITTED和REPEATABLE READ这两个事务隔离级别。

即在READ COMMITTED和REPEATABLE READ这两个事务隔离级别下,如何解决不可重复读和幻读的问题?

通过锁机制和MVCC。其中锁主要处理当前读相关问题,MVCC处理快照读相关问题。

mysql锁的分类 InnoDB Locking

根据锁的覆盖范围,重点关注:表锁,行锁,间隙锁,临键(next-key)锁

MVCC部分待续。

附录总结一

**mysql事务(ACID)的实现原理:

原子性(Atomicity): undo log

一致性(Consistency):一致性是目的,原子性、隔离性、持久性是手段。实现AID三大特性才有可能实现一致性。

隔离性(Isolation): 写写:锁(行锁,表锁,间隙锁);写读:MVCC

持久性(Durability):redo log

MySQL-(InnoDB)事务和锁的更多相关文章

  1. 秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现

    Reference:  http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...

  2. MySQL的事务和锁

    MySQL的事务和锁   阅读目录 什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再 ...

  3. MySql InnoDB中的锁研究

    # MySql InnoDB中的锁研究 ## 1.InnoDB中有哪些锁### 1. 共享和排他(独占)锁(Shared and Exclusive Locks) InnoDB实现标准的行级锁定,其中 ...

  4. Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁

    Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...

  5. 搞懂MySQL InnoDB事务ACID实现原理

    前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...

  6. MySQL/InnoDB中,对于锁的认识

    MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...

  7. 【译文】MySQL InnoDB 使用的锁分析

    InnoDB 使用的 锁类型 共享锁和排它锁 意向锁 记录锁 间隙锁 Next-key 锁 插入意向锁 AUTO-INC 锁 共享锁和排他锁 InnoDB实现了俩个标准的行级锁,共享锁和排它锁. 共享 ...

  8. InnoDB事务和锁

    InnoDB支持事务,MyISAM不支持事务. 一.事务的基本特性 ACID特性 1.原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 2.一致性( ...

  9. Mysql InnoDB事务

    http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html 事务的四个特性 1.原子性(atomicity)原子性是指整个数据库事务是 ...

  10. 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)

    这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...

随机推荐

  1. [C++] epoll server实例

    // IO多路复用,事件驱动+非阻塞,实现一个线程完成对多个fd的监控和响应,提升CPU利用率 // epoll优点: // 1.select需要每次调用select时拷贝fd,epoll_ctl拷贝 ...

  2. hadoopzookeeper

    一.zookeeper是什么(概括)? Zookeeper是一个分布式协调服务的开源框架,为分布式程序提供协调服务,同时用来解决分布式集群中应用系统的数据一致性问题. zookeeper在本质上是一个 ...

  3. ORACLE ORA-12638:身份证明检索失败

    使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,那不妨直接看 ...

  4. mysql替换空格制表符换行

    update ztbdb_pro set pro=REPLACE(pro,CHAR(10),''); update ztbdb_pro set pro=REPLACE(pro,CHAR(13),'') ...

  5. Arduino优化 减少重复代码 例2

    Example->Blink: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUI ...

  6. PO、VO、DAO、BO、DTO、POJO 之间的区别

    PO(Persistant Object),持久对象 这个对象是与数据库中的表相映射的Java对象. VO(Value Object),值对象 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据 ...

  7. Spring--依赖注入:setter注入和构造器注入

    依赖注入:描述了在容器中建立Bean于Bean之间依赖关系的过程 setter注入 在本来已经在service里面引用了bean的相关方法的基础上,再引用之前已经写过的userDao的对象,即在ser ...

  8. 最近写了一个demo,想看看java和go语言是怎么写的

    最近写了一个demo:demo的github地址 一. 简单介绍 1. Server端 它是一个WebApi服务,把它当成一个黑盒就行了. 2. MiddleServer端 是重点,它是一个WebAp ...

  9. [Python]语音识别媒体中的音频到文本

    @ 目录 准备工作 视频转音频 识别音频到文本 音频直接转换文本 准备工作 安装python3环境 申请一个可用的语音转换API,此篇以Microsoft Azure Speech为例 在Micros ...

  10. Docke 使用与详解1 --Tomcat

    一.Docker容器案例使用 --Tomcat安装与使用 1.Tomcat 安装 --docker tomcat镜像官网 1>使用docker pull tomcat拉取镜像,默认拉取最新版本: ...