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-笔记 隔离级别、事务的更多相关文章

  1. Mysql得隔离级别

    一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...

  2. Mysql的隔离级别

    一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...

  3. mysql数据库隔离级别

    # 原创,转载请留言联系 事务的隔离级别 (由高到低)1.串行化(serializable):一个事务一个事务的执行2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交 ...

  4. MYSQL事件隔离级别以及复读,幻读,脏读的理解

    一.mysql事件隔离级别 1未提交读(READUNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)( 隔离级别最低,并发性能高 ) 2 ...

  5. mysql验证隔离级别

    mysql更改隔离级别 参考https://blog.csdn.net/qq_21299835/article/details/121189565 关闭mysql事务自动提交:set autocomm ...

  6. MySQL 不同隔离级别,都使用了什么锁?

    大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...

  7. mysql 数据库隔离级别

    select @@tx_isolation; 4种隔离级别 1.read uncommitted 2.read committed 3.repeatable read(MySQL默认隔离级别) 4.  ...

  8. [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?

    Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...

  9. spring事务和mysql的隔离级别

    mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下.   mysql事务: 在mysql中,只有使用了I ...

  10. MySQL 中隔离级别 RC 与 RR 的区别

    1. 数据库事务ACID特性 数据库事务的4个特性: 原子性(Atomic): 事务中的多个操作,不可分割,要么都成功,要么都失败: All or Nothing. 一致性(Consistency): ...

随机推荐

  1. DotNetCore跨平台~EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction

    回到目录 TransactionScope是.net平台基于的分布式事务组件,它默认为本地事务,同时当系统有需要时可以自动提升为分布式事务,而对系统的前提是要开启MSDTC服务,必要时需要在数据库服务 ...

  2. JavaScript夯实基础系列(二):闭包

      在JavaScript中函数是一等公民.所谓一等公民是指函数跟其他对象一样,很普通,可以进行把函数存在数组中.作为参数传递.赋值给变量等操作.当函数作为另一个函数的返回值在外部调用时,跟该函数在函 ...

  3. Vue不能检测数组或对象变动问题的解决

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 基于Log4Net本地日志服务简单实现

    背景 项目开发中,我们或多或少会使用诸如NLog,Log4Net,Kafka+ELK等等日志套件: 基于关注点分离原则,业务开发的时候不应该关注日志具体实现:并且后续能方便切换其他日志套件: 这里先实 ...

  5. WebApiClient的接口输入验证

    1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍WebApiClient的接口参数输入有效性验证的新特性. ...

  6. nmon - 性能监控利器介绍

    关于nmon nmon 是一款小巧的系统监控程序(只有5000行代码),可以用来对CPU.磁盘.内存等资源指标来做实时监控. 之前在做系统性能优化工作时用得较多,觉得非常不错,于是在这里给大家介绍下用 ...

  7. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔Kinetis系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2010年开始推出的Kinetis系列昭示着ARM C ...

  8. Docker部署Zabbix监控MariaDB主从同步(Percona Monitoring Plugins for Zabbix)

    一.安装Docker并部署Zabbix 建议先配置清华大学的docker-ce yum源,速度有保障:清华大学repo源 1.Zabbix Server节点配置 部署环境: [root@server0 ...

  9. flex 圣杯布局

    基本思路 圣杯布局分为3段:上.中.下.  中段被分为:左.中.右3块. 1:采用flex布局时,先把弹性容器主轴设置为垂直方向(flex-direction:column) 2:上.中.下3块弹性项 ...

  10. NET4.6下的UTC时间转换

    int UTCSecond = (int)((DateTimeOffset)DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local)).ToUnix ...