mysql-笔记 隔离级别、事务
1 隔离级别:低级别的隔离通常可以执行更高的并发,系统 开销也更低
2 Read uncommitted:事务可以读取未提交的数据,脏读,应少用
3 read committed:不可重复读,事务只能看见已提交的事务所做的修改,大多数数据库使用这一级别,mysql不是
4 repeatable read: 可重复读,在同一个事务中多次读取同样记录结果是一致的。可能幻读:指当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该 范围内的记录时,会产生幻行。
mysql 默认的事务隔离级别
5 serializable:可串行化 ,会在读取的每一行数据上加锁,可能导致大量的超时和锁争的问题。是最高的隔离级别,通过强制事务串行执行,避免了前面说的幻读的问题。
实际少用,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下才考虑
6 锁:两个或多个事务在同一资源上相互占用,并请求锁对方占用的资源,多个事务试图以不同的顺序锁定资源时或多个事务同时锁定一个资源时,产生死锁。
innoDB处理方式:将持有最少行级排他锁的事务进行回滚
锁的行为和顺序是和存储引擎相着的。以同样的顺序执行语句,有些引擎会产生死锁,有些则不会。死锁产生有双重原因,有些是真正的数据冲突,难避免,有些则是由于存储引擎的实现方式导致的。
打破死锁:部分或全部回滚其中的一个事务
7 mysql提供了两种事务型的引擎:innoDB NDBCluster
第三方存在引擎 :xtraDB PBXT
自动提交:mysql默认采用自动提交模式,可以用show variables like 'autocommit'; 可看,set autocommit=1 ; 开启
1 或者 on 表示 启用;0 或 off 表示禁用
autocommit=0时,所有的查询都是在一个事务中,直到显式的执行commit 提交或rollback回滚该事务结束同时又开始一个新的事务。
对于非事务型的表:myisam或 内存表,不会有影响,一直处于autocommit启用模式,另外有些伪命令在执行前会强制执行commit提交当前事务:alter table .lock table
mysql可以通过执行 set transaction isolation level命令设置隔离级别,新的隔离级别会在下一个事务开始时生效,可以在配置文件中设置整个数据库的隔离级别,也可以只改变当前会话的隔离级别
set session transaction isolation level read committed
mysql能够识别所有的4个ANST隔离级别,InnoDB引擎也支持所有的隔离级别
8 在事务中混合使用存储引擎:mysql服务器层不管理事务,事务是由下层的存储引擎实现的。所以在同一事务中,使用多种存储引擎是不可靠的。回滚时非事务型的表上的变更不能被回滚。
9 Innodb 采用2阶段锁定协议,在事务执行过账中,随时都可以执行锁定,锁只有在执行commit或者rollback的时候才会释放,并且所有的锁是在同一时刻被释放。innodb会根据隔离级别在需要的时候自动加锁
innodb也支持通过特定的语句显式锁定,这些语句不属于sql规范:select ....lock inshare mode; select ... for update
mysql 也支持lock tables unlock tables 语句,这是在服务器层实现的,和存储引擎无关。不册 替代事务处理。
innodb的行级锁工作得比lock table语句好。在innodb中的可以去掉lock table语句
10 多版本并发控制:MVCC 通过保存某个时间点的快照来实现的
分:乐观并发控制
悲观并发控制
InnoDB 的MVCC是通过在每行记录后面保存2个隐藏的列来实现的。一个保存行的创建时间,一个保存行的过期时间或删除时间。存储的是系统版本号。每开始一个新的事务、系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询列的每行记录的版本号进行比较。
repeatable read隔离级别下:
select INNODB 根据2个条件检查每行记录:
1 查找版本早于当前事务版本的数据行
2 行的删除版本要么未定义,要么大于当前事务版本号。只有符合2个条件才返回作为查询结果
insert :为新增插入的每一行保存当前系统版本号作为行版本号
delete:为删除的每一行保存当前系统版本号作为行删除标识
update: 为插入一行新记录保存当前系统版本号作为版本号,同时保存当前系统版本号到原来的行作为删除标识。
MVCC只在repeatable read/read committed下工作
mysql-笔记 隔离级别、事务的更多相关文章
- Mysql得隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- Mysql的隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- mysql数据库隔离级别
# 原创,转载请留言联系 事务的隔离级别 (由高到低)1.串行化(serializable):一个事务一个事务的执行2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交 ...
- MYSQL事件隔离级别以及复读,幻读,脏读的理解
一.mysql事件隔离级别 1未提交读(READUNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)( 隔离级别最低,并发性能高 ) 2 ...
- mysql验证隔离级别
mysql更改隔离级别 参考https://blog.csdn.net/qq_21299835/article/details/121189565 关闭mysql事务自动提交:set autocomm ...
- MySQL 不同隔离级别,都使用了什么锁?
大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...
- mysql 数据库隔离级别
select @@tx_isolation; 4种隔离级别 1.read uncommitted 2.read committed 3.repeatable read(MySQL默认隔离级别) 4. ...
- [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?
Server version: 5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...
- spring事务和mysql的隔离级别
mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下. mysql事务: 在mysql中,只有使用了I ...
- MySQL 中隔离级别 RC 与 RR 的区别
1. 数据库事务ACID特性 数据库事务的4个特性: 原子性(Atomic): 事务中的多个操作,不可分割,要么都成功,要么都失败: All or Nothing. 一致性(Consistency): ...
随机推荐
- 如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器
本文的主题是如何高效快捷的打开你想要打开的软件 本文介绍的应该是最简洁的一种方式,借助于windows内部的path进行设置 也可以认为是一种形式的windows应用启动器程序---win+R快速打开 ...
- 使用 FFT 分析周期性数据
可以使用傅里叶变换来分析数据中的变化,例如一个时间段内的自然事件. 天文学家使用苏黎世太阳黑子相对数将几乎 300 年的太阳黑子的数量和大小制成表格.对大约 1700 至 2000 年间的苏黎世数绘图 ...
- DSAPI 图形图像篇(上)
彩色文字对象 基于一些特殊需求,本人开发了彩色文字对象,该功能通过类似html代码的方式指示文本,并输出图像. 我们还是先来看一张图像. 这不是文本,是通过指定文本代码输出的图像.我们来看一下实现代码 ...
- String方法
String 大小写转换: String str = "ABC";String str1 = "abc"; System.out.println("A ...
- react异步加载组件
1. 创建 asyncComponent 异步加载工具 import React from 'react' function asyncComponent(loadComponent){ class ...
- 读书笔记之_Win10 与Jmeter5.1.1界面兼容:
读书笔记之win10 与jmeter5.1.1界面兼容: 调整前:
- Android探究之ANR
什么是ANR ANR:Application Not Responding,即应用程序无响应. 在Android中,ActivityManagerService(简称AMS)和WindowManage ...
- XE5 搭建DataSnap服务
1 准备工作 1.1 环境准备 XE5或XE7,操作系统Windows7(64位)操作系统. 数据库MSSQL选择SQLServer2008. 如果数据库服务没有在开发电脑上,则需要在开发电脑上安 ...
- RubyGems系列之RubyGems初识
转载请标明来源:https://www.cnblogs.com/zhanggui/p/9719291.html 一. 基础理解 RubyGems简称gems,它是一个用于对Ruby组件进行打包的Rub ...
- golang 实现HTTP代理和反向代理
正向代理 package main import ( "fmt" "io" "net" "net/http" " ...