MySQL-(InnoDB)事务和锁
在事务并行处理背景下,不同的事务之间因数据共享的状态变化,存在着某种依赖/隔离影响。即事务隔离级别。
事务隔离级别,官网的解释在这里。
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)事务和锁的更多相关文章
- 秒杀怎么样才可以防止超卖?基于mysql的事务和锁实现
Reference: http://blog.ruaby.com/?p=256 并发事务处理带来的问题? 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从 ...
- MySQL的事务和锁
MySQL的事务和锁 阅读目录 什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再 ...
- MySql InnoDB中的锁研究
# MySql InnoDB中的锁研究 ## 1.InnoDB中有哪些锁### 1. 共享和排他(独占)锁(Shared and Exclusive Locks) InnoDB实现标准的行级锁定,其中 ...
- Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁
Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- MySQL/InnoDB中,对于锁的认识
MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...
- 【译文】MySQL InnoDB 使用的锁分析
InnoDB 使用的 锁类型 共享锁和排它锁 意向锁 记录锁 间隙锁 Next-key 锁 插入意向锁 AUTO-INC 锁 共享锁和排他锁 InnoDB实现了俩个标准的行级锁,共享锁和排它锁. 共享 ...
- InnoDB事务和锁
InnoDB支持事务,MyISAM不支持事务. 一.事务的基本特性 ACID特性 1.原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 2.一致性( ...
- Mysql InnoDB事务
http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html 事务的四个特性 1.原子性(atomicity)原子性是指整个数据库事务是 ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
随机推荐
- [C++] epoll server实例
// IO多路复用,事件驱动+非阻塞,实现一个线程完成对多个fd的监控和响应,提升CPU利用率 // epoll优点: // 1.select需要每次调用select时拷贝fd,epoll_ctl拷贝 ...
- hadoopzookeeper
一.zookeeper是什么(概括)? Zookeeper是一个分布式协调服务的开源框架,为分布式程序提供协调服务,同时用来解决分布式集群中应用系统的数据一致性问题. zookeeper在本质上是一个 ...
- ORACLE ORA-12638:身份证明检索失败
使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,那不妨直接看 ...
- mysql替换空格制表符换行
update ztbdb_pro set pro=REPLACE(pro,CHAR(10),''); update ztbdb_pro set pro=REPLACE(pro,CHAR(13),'') ...
- Arduino优化 减少重复代码 例2
Example->Blink: void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUI ...
- PO、VO、DAO、BO、DTO、POJO 之间的区别
PO(Persistant Object),持久对象 这个对象是与数据库中的表相映射的Java对象. VO(Value Object),值对象 通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据 ...
- Spring--依赖注入:setter注入和构造器注入
依赖注入:描述了在容器中建立Bean于Bean之间依赖关系的过程 setter注入 在本来已经在service里面引用了bean的相关方法的基础上,再引用之前已经写过的userDao的对象,即在ser ...
- 最近写了一个demo,想看看java和go语言是怎么写的
最近写了一个demo:demo的github地址 一. 简单介绍 1. Server端 它是一个WebApi服务,把它当成一个黑盒就行了. 2. MiddleServer端 是重点,它是一个WebAp ...
- [Python]语音识别媒体中的音频到文本
@ 目录 准备工作 视频转音频 识别音频到文本 音频直接转换文本 准备工作 安装python3环境 申请一个可用的语音转换API,此篇以Microsoft Azure Speech为例 在Micros ...
- Docke 使用与详解1 --Tomcat
一.Docker容器案例使用 --Tomcat安装与使用 1.Tomcat 安装 --docker tomcat镜像官网 1>使用docker pull tomcat拉取镜像,默认拉取最新版本: ...