mysql 原理 ~ 事务隔离机制
简介: 事务隔离知多少
内容
一 基础知识
1 事务特性 ACID
A 原子性 C 一致性 I 隔离性 D 持久性
2 并行事务出现的问题
1 脏读 读取了其他事务未提交的数据
2 不可重复性读 1 在同一个事务内多次查询的结果不一致 2 可以通过for update or RR模式的MVCC避免这种现象 3 针对的是update/delete操作
3 幻读 1 当前事务读第一次取到的数据比后来读取到数据条目少 通过 next key lock避免
这里要注意
官方文档实际要表达的意义是“在同一个事务内,多次连续查询的结果是一样的,不会因其他事务的修改而导致不同的查询结果”
当前事务如果未发生更新操作(增删改),快照版本会保持不变,多次查询读取的副本是同一个;当前事务如果发生更新(增删改),再次查询时,会刷新快照版本
3 mysql隔离级别
RU 读未提交 -> 其他事务可以读取未提交的事务
RC 读已提交 -> 其他事务只能读取已提交的事务 可以避免(脏读) 不可避免(不可重复性读和幻读) 锁(record lock)
RR 可重复性读-> 本事务在事务内多次读取的事务是一致的,不会产生变化,直到本事务提交 可以避免(脏读,不可复重复性读和幻读) 锁(record lock+gap lock)
SE 串行化->事务之前是串行化执行的,包括select
4 默认隔离级别
mysql rr级别 oracle rc级别
oracle应用迁移到mysql的时候要注意
金融级别的建议使用RR
5 可重复性读和读已提交的区别
1 可重复性读是在事务开始的时候只创建一次视图函数 直到事务结束 效果等同于(start transaction with consistent snapshot) 查询事务开启前提交的数据
2 读已提交是在每次执行的时候都创建一次视图函数 直到事务结束 查询在事务内语句前提交的数据
6 RR模式下的更新问题
问题描述 在RR模式下 select搜索的是旧库的快照,但是update更新的是新库的数据,导致更新问题
问题解决 在读取的过程中设置一个排他锁,在 begin 事务里, select 语句中增加 for update 后缀,这样可以保证别的事务在此事务完成commit前无法操作记录
7 快照的实现
1 事务开始时会向mysql申请一个transation id
2 事务中每行的变更被称为一个版本
3 每个版本都会导致trx_id(赋值为row_id)递增,作为标记版本
4 而数据版本的可见性规则,就是基于数据的 row trx_id...
5 快照是基于库做的
8 id自增长知多少
1 thread_id
内容 show processlist的第一列就是thread_id,用来进行标注
2 trx_id
内容 用来维护一致性读场景
3 xid
内容 用来维护二次提交的事务一致性(redo and binlog必须xid一致)
9 在生产环境中究竟是用RR还是RC模式
这取决与你的业务查询,因为RR和RC模式的根本区别在于采用select获取结果的不同可能性,如果你的业务依赖于大量的一致性读,就不该采用RC模式,如果只是少量的一致性读,则可以采用rc模式,一致性读用for update实现
mysql 原理 ~ 事务隔离机制的更多相关文章
- 理解MySql事务隔离机制、锁以及各种锁协议
一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念假设串起来足够写一本书,所以在这里给自己梳理一 ...
- 一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...
- [MySQL数据库之事务、读现象、数据库锁机制、多版本控制MVCC、事务隔离机制]
[MySQL数据库之事务.读现象.数据库锁机制.多版本控制MVCC.事务隔离机制] 事务 1.什么是事务: 事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻 ...
- MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别
原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...
- MySQL之事务隔离级别--转载
转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted ...
- 重新学习MySQL数据库8:MySQL的事务隔离级别实战
重新学习Mysql数据库8:MySQL的事务隔离级别实战 在Mysql中,事务主要有四种隔离级别,今天我们主要是通过示例来比较下,四种隔离级别实际在应用中,会出现什么样的对应现象. Read unco ...
- 【MySQL】事务隔离级别及ACID
注:begin或start transaction并不是一个事务的起点,而是在执行它们之后的第一个操作InnoDB表的语句,事务才真正开始.start transaction with consist ...
- mysql数据库——事务隔离级别
四种隔离级别: 一:READ UNCOMMITTED(未提交读) 事务可以读取其他事务未提交的数据,称为脏读 二:READ COMMITTED(提交读) 一个事务开始时,只能"看见" ...
- 【Java面试】请你简单说一下Mysql的事务隔离级别
一个工作了6年的粉丝,去阿里面试,在第一面的时候被问到"Mysql的事务隔离级别". 他竟然没有回答上来,一直在私信向我诉苦. 我说,你只能怪年轻时候的你,那个时候不够努力导致现在 ...
随机推荐
- 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)
博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...
- MT【236】必要性探路
$\dfrac{lnx}{x+1}+\dfrac{1}{x}>\dfrac{lnx}{x-1}+\dfrac{k}{x}$对于任意$x>0$成立,求$k$的范围. 解答:由题意,对任意$x ...
- [TJOI2011]构造矩阵
考虑优化贪心,不回溯,对于每一位,你都判一下放0的话后面是否有解,用网络流判是否可以完美匹配就行了. 但这样时间复杂是错的,所以不必每次都重新建图,现在原来的图中看一下该行列是否已经匹配,若没有,则强 ...
- 【BZOJ3202】项链(莫比乌斯反演,Burnside引理)
[BZOJ3202]项链(莫比乌斯反演,Burnside引理) 题面 BZOJ 洛谷 题解 首先读完题目,很明显的感觉就是,分成了两个部分计算. 首先计算本质不同的珠子个数,再计算本质不同的项链个数. ...
- C# ADO.NET基础&实战
什么是ADO.NET:数据库访问技术! 作用:通过程序来连接访问数据库! 一.基础: using System.Data.SqlClient; //数据库连接命名空间 string connec ...
- C# winform C/S WebBrowser 微信第三方登录
网上很多的资料都是B/S结构的,这里是基于C# C/S 结构的微信第三方授权登录 一.准备知识 1 http Get和Post方法.做第三方授权登录,获取信息基本上都是用get和post方法,做之前需 ...
- win32 窗口缩放时出现闪屏
今天无意发现之前写的一个小工具在缩放窗口的时候,出现闪屏,主要有两个位置: 工具栏出一闪屏 右侧的控制面板出现闪屏 (这个控制面板与多层元件组合而成) 之前真没注意到这个问题,平时都是最大化/恢复窗口 ...
- findbugs的使用
我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现. 在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还有 ...
- 九、java容器
目录 一.容器的概念 二.Cpllection接口 三.Iterator接口 四.增强的for循环 五.Set接口 六.List接口和Comparable接口 八.Map接口 九.自动打包/解包 十. ...
- CodeForces842C 树上dfs
http://codeforces.com/problemset/problem/842/C 题意: 有一个n个节点的数,每个点有一个点权,根到这个点的所有点权(包括这个点和根)的gcd值为这个点的答 ...