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. 通用查询设计思想(2)- 基于ADO.Net的设计

    不少公司用的是ADO.NET的访问方式,估计不少朋友对于sql的拼写真是深恶痛绝,在没有一个封装足够好的底层的项目,特别是经过许多人接手之后,代码那叫一个惨不忍睹,本文借助[通用查询设计思想]这篇文章 ...

  2. MongoDB3.2.22快速入门与使用【未完待续】

    1.CentOS的安装和mongodb,UVE的使用 1.1.CentOS7安装 虚拟机CentOS7安装步骤:https://www.cnblogs.com/wyt007/p/10295834.ht ...

  3. MySQL InnoDB 修改表列Online DDL

    概述 一般来说数据库结构一经设计,不能轻易更改,因为更改DDL(Data Definition Language)操作代价很高,所以在进行数据库结构设计时需要谨慎. 但是业务发展是未知的,特别是那些变 ...

  4. 浅析Servlet执行原理

    在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础.无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效 ...

  5. .net core +codefirst(.net core 基础入门,适合这方面的小白阅读,本文使用mysql或mssql)

    设置为model所在的那一层 前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以.net mvc开发员很容易入手.net core mvc .但是两个又 ...

  6. App.config自定义节点读取

    <?xml version="1.0" encoding="utf-8"?> <configuration> <!--<ot ...

  7. 使用C# 操作存储过程,执行sql语句通用类

    如何使用C# 操作存储过程,执行sql语句? 闲话不多说,直接上代码:     /// <summary>    /// Sql通用类    /// </summary>    ...

  8. oracle学习笔记(六) JDBC使用

    JDBC使用 1. 导包 直接使用IDEA导入依赖包即可 新建一个lib,把jar包放在这里 2. 加载驱动 Class.forName("oracle.jdbc.driver.Oracle ...

  9. 属于自己的MES(二)必备的主数据

    MES在系统建设前,需要先进行一些必要的数据,这些主数据是支撑MES执行的关键. 1.BOM BOM通常称为“物料清单”,也就是产品结构,在化工.制药.食品.烟草领域也叫“配方”,它主要描述了物料的物 ...

  10. DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass

    看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会根据标签 ...