事务隔离级别

MySQL-配置文件my.cnf参数优化详解

这一生的挚爱 提交于 2019-12-13 15:21:46
MySQL-配置文件my.cnf参数优化详解 [client] ######################################################################### # # # MySQL客户端配置 # # # ######################################################################### port = 3306 # MySQL客户端默认端口号 socket = /data/mysql/my3306/mysql.sock # 用于本地连接的Unix套接字文件存放路径 default-character-set = utf8mb4 # MySQL客户端默认字符集 [mysql] ######################################################################### # # # MySQL命令行配置 # # # ######################################################################### auto-rehash # 开启tab补齐功能 socket = /data/mysql/my3306/mysql.sock #

Mysql的多版本并发控制机制MVCC

对着背影说爱祢 提交于 2019-12-13 12:32:01
MySQL的MVCC机制 1、MVCC简介 1.1 MVCC是什么? MVCC,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问; 1.2 MVCC是为了解决什么? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用 大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销    众所周知,在MYSQL中,MyISAM使用的是表锁,InnoDB使用的是行锁。而InnoDB的事务分为四个隔离级别,其中默认的隔离级别REPEATABLE READ需要两个不同的事务相互之间不能影响,而且还能支持并发,这点悲观锁是达不到的,所以REPEATABLE READ采用的就是乐观锁,而乐观锁的实现采用的就是MVCC。正是因为有了MVCC,才造就了InnoDB强大的事务处理能力。 MVCC解决的问题是读写互相不阻塞的问题,每次更新都产生一个新的版本,读的话可以读历史版本。试想,如果一个数据只有一个版本,那么多个事务对这个数据进行读写是不是需要读写锁来保护? 一个读写事务在运行的过程中在访问数据之前先加读

关于Spring事物的面试题

南楼画角 提交于 2019-12-13 12:02:29
数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来。 下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。 事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。 事务最重要的 两个特性 ,是事务的传播级别和数据隔离级别。 传播级别定义的是事务的控制范围, 事务隔离级别定义的是事务在数据库读写方面的控制范围。 事务的7种传播级别: 1) PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么就加入到事务中执行,如果当前上下文中不存在事务,则新建事务执行。所以这个级别通常能满足处理大多数的业务场景。 2)PROPAGATION_SUPPORTS ,从字面意思就知道,supports,支持,该传播级别的特点是,如果上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行。所以说,并非所有的包在transactionTemplate.execute中的代码都会有事务支持。这个通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。 3)PROPAGATION_MANDATORY , 该级别的事务要求上下文中必须要存在事务,否则就会抛出异常

MYSQL MVCC实现机制

99封情书 提交于 2019-12-13 01:09:51
1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用. 大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销. 1.3 MVCC实现 MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC. 不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制. 2.MVCC 具体实现分析 下面,我们通过InnoDB的MVCC实现来分析MVCC使怎样进行并发控制的. InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),没开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID.下面看一下在REPEATABLE READ隔离级别下,MVCC具体是如何操作的. 2.1简单的小例子 create table yang( id int primary key auto_increment, name

MySQL事务隔离级别(二)

廉价感情. 提交于 2019-12-12 23:37:41
搞清楚MySQL事务隔离级别 首先创建一个表 account。创建表的过程略过 (由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB) 。表的结构如下: 为了说明问题,我们打开两个控制台分别进行登录来模拟两个用户(暂且成为用户 A 和用户 B 吧),并设置当前 MySQL 会话的事务隔离级别。 一. read uncommitted(读取未提交数据) 具体 用户 A 的操作如下: 1 2 3 4 5 6 set session transaction isolation level read uncommitted; start transaction; select * from account; 用户 B 的操作如下: 1 2 3 4 5 6 7 8 9 10 set session transaction isolation level read uncommitted; start transaction; update account set account=account+ 200 where id = 1 ; 随后我们在 A 用户 中查询数据,结果如下: 结论一 我们将事务隔离级别设置为 read uncommitted,即便是事务没有 commit,但是我们仍然能读到未提交的数据,这是所有隔离级别中最低的一种 那么这么做有什么问题吗?

spring学习12-声明式事务管理

瘦欲@ 提交于 2019-12-12 01:27:36
目录 Spring:声明式事务 回顾事务 Spring中的事务实现的几种方式 转账的事务管理 思考问题? Spring:声明式事务 回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎! 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。 事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。 事务四个特性ACID 原子性(atomicity) 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用 一致性(consistency) 一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中 隔离性(isolation) 可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 持久性(durability) 事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中 spring中的事务 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略。 Spring事务管理涉及的接口的联系如下: 事务管理器 Spring并不直接管理事务,而是提供了多种事务管理器

MySQL索引与事务、存储引擎MyISAM和InnoDB (理论+实践篇)

半腔热情 提交于 2019-12-12 00:19:46
索引的概念 数据库中的索引与书籍中的目录类似 在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息 书中的目录是一个词语列表,其中注明了包含各个词的页码 数据库索引 在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据 数据库中的索引|是某个表中一-列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单 索引的的作用 设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率 特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快成3 F倍 可以降低数据库的I0成本,并且索引还可以降低数据库的排序成本 通过创建唯一性索引保证数据表数据的唯- -性可以加快表与表之间的连接 在使用分组和排序时,可大大减少分组和排序时间 索引的分类 普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制 唯一性索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列表的所有值都只能出现一次,即必须唯一 主键 主键是一种唯一索引,但它必须指定为“PRIMARY KEY" 全文索引 MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT, 全文索引可以在VARCHAR或者TEXT类型的列上创建 单列索引与多列索引 索引可以是单列上创建的索引,也可以是在多列上创建的索引

MySQL事务,这篇文章就够了

强颜欢笑 提交于 2019-12-11 21:27:53
原文链接: https://blog.ouyangsihai.cn/ >> MySQL事务,这篇文章就够了 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的系列文章,应该对你读下面的文章有所帮助。 InnoDB与MyISAM等存储引擎对比 面试官问你B树和B+树,就把这篇文章丢给他 MySQL的B+树索引的概念、使用、优化及使用场景 MySQL全文索引最强教程 MySQL的又一神器-锁,MySQL面试必备 0 什么是事务 事务(Transaction) 是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都 执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每 个事务结束时,都能保持数据一致性。 同时,事务有着严格的地定义,必须满足四个特性,也就是我们一直说的ACID,但是,并不是说各种数据库就一定会满足四个特性,对于不同的数据库的实现来说,在不同程度上是不一定完全满足要求的,比如,Oracle数据库来说,默认的事务隔离级别是 READ COMMITTED ,是不满足隔离性的要求的。 下面我们趁热打铁,介绍一下事务的必知必会的四大特性,这几个特性也是在面试中,面试官面试MySQL的相关知识的时候,问的比较多的问题,所以,这几个特性务必需要理解并且透彻的记在心里,开个玩笑,被火车撞了,也不应该忘记这四个特性! 1 事务的四大特性

MySQL中的事务隔离级别

旧时模样 提交于 2019-12-11 16:53:30
目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。我们的数据库锁,也是为了构建这些隔离级别存在的。 分类 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读) 可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 锁 表锁: 对整张表加锁,分为读锁和写锁.因为会锁住整张表,所以一般只在执行DDL之前使用 行锁:事务就是通过行锁来实现的. 在RC级别,数据的读取都是不加锁的,但是数据的写入、修改和删除是需要加锁的。 RR级别(MySQL的默认级别)中,分为读和写两种场景: 读: 同一事务的多个实例在并发读取数据时,会看到同样的数据行(不管此时是否有其他事务修改了数据且提交).MySQL通过MVCC(创建版本号+删除版本号)来实现可重复读. 写:使用Next-Key锁(行锁 + GAP 间隙锁) Serializable : 读加共享锁,写加排他锁,读写互斥

Mysql-事务(二)

ぃ、小莉子 提交于 2019-12-11 07:49:13
1.事务的并发问题 脏读 :事务A读取了事务B更新的数据,然后B进行了回滚操作,这时A读到的数据就是脏数据,侧重于一个事务读取了另一个未提交事务修改的数据。 不可重复读 :事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交(和脏读不一样的地方),导致事务A多次读取同一数据时,结果不一致。 幻读 :系统管理员A将数据库中所有学生的成绩从具体分数改未ABCD,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条计数没有改过来,就好像发生了幻觉一样,这就叫幻读。 小结:脏读侧重于一个事务读取了另一个未提交事务操作的数据,不可重复读侧重于一个事务读取到了另一个已提交事务修改的数据,幻读侧重于一个事务读取到了另一个已提交事务新增或删除的数据。 2.事务隔离级别概述 mysql中,innodb所提供的事务符合ACID的要求,而事务通过事务日志中的redo log和undo log满足了原子性、一致性、持久性,事务还会通过锁机制满足隔离性,在innodb存储引擎中,有不同的隔离级别,它们有着不同的隔离性,一共有如下4中: READ-UNCOMMITED :读未提交 READ-COMMITED :读已提交,解决了脏读问题 REPEATABLE-READ :可重复读,默认,解决了脏读和不可重复读问题 SERIALIZABLE :串行化