事务隔离级别

事务究竟有没有被隔离

喜你入骨 提交于 2020-02-11 11:59:04
我们知道在 RR 级别下,对于是一个事务来说,读到的值应该是相同的,但有没有想过为什么会这样,它是如何实现的?会不会有一些特殊的情况存在?本篇文章会详细的讲解 RR 级别下事务被隔离的原理。在阅读后应该了解如下的内容: 了解 MySQL 中的两种视图 了解 RR 级别下,如何实现的事务隔离 了解什么是当前读,以及当前读会造成那些问题 明确视图的概念 在 MySQL 中,视图有两种。第一种是 View,也就是常用来查询的虚拟表,在调用时执行查询语句从而获取结果, 语法如 create view . 第二种则是存储引擎层 InnoDB 用来实现 MVCC(Mutil-Version Concurrency Control | 多版本并发控制)时用到的一致性视图 consistent read view , 用于支持 RC 和 RR 隔离级别的实现。简单来说,就是定义在事务执行期间,事务内能看到什么样的数据。 事务真正的启动时机: 在使用 begin 或 start transation 时,事务并没有真正开始运行,而是在执行一个对 InnoDB 表的操作时(即第一个快照读操作时),事务才真正启动。 如果想要立即开始一个事务,可以用 start transaction with consistent snapshot 命令。 不期待的结果,事务没有被隔离 在之前 MySQL 事务 介绍中

数据库事务

纵然是瞬间 提交于 2020-02-11 02:03:11
一.本地数据库事务 1.事务ACID理解 原子性【Atomicity】:一次事务的多次操作是原子的,要么全部执行,要么全部不执行。 一致性【Consistency】:事务前后数据库的约束保持一致性,比如键值约束。 隔离性【Isolation】:事务之前有一定隔离机制,不用隔离级别。 持久性【Durability】:事务提交成功数据被持久化到数据库中存储。 2.隔离级别 读未提交 读已提交 可重复读 串行 3.锁的分类 悲观锁 乐观锁 共享锁【读锁】 排他锁【写锁】 更新锁 ACID的详解:https://www.cnblogs.com/wyf19891208/p/6834454.html 事务详解:https://blog.csdn.net/aluomaidi/article/details/52460844 二.分布式事务 https://www.cnblogs.com/savorboard/p/distributed-system-transaction-consistency.html https://www.cnblogs.com/taiyonghai/p/6094350.html https://blog.csdn.net/X5fnncxzq4/article/details/79235790 来源: https://www.cnblogs.com/xiaofugua/p

事务

爱⌒轻易说出口 提交于 2020-02-10 20:49:44
select * from 表名 where 条件 id > 10 insert into 表名 values() update 表名 set name = ‘’ where id = 1 delete 表名 where 事务 事务的四大特性(ACID): 原子性(atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位. 一致性(consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 例:拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性(Isolation) 隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别 脏读 不可重复读 幻读 1.脏读(Phantom Read): 脏读就是指当一个事务正在访问数据,并且对数据进行了修改

InnoDB 事务加锁分析

六月ゝ 毕业季﹏ 提交于 2020-02-10 11:16:22
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/S7MhlsZveBHRSQhq5aTIJA 作者:何志创 一般大家对数据库事务的了解可能停留在事务的ACID特性以及事务4种不同的隔离级别层面上,而对于事务 4 种不同隔离级别如何实现了解相对较少。 本文以 MySQL 数据库 InnoDB 引擎为例,为大家分析 InnoDB数据库引擎对默认的隔离级别可重复读(RR)的具体实现。 整文知识点介绍:事务4种隔离级别、不同隔离级别解决的问题、MVCC、锁的类型、加锁案例分析;阅读完整文相信大家对事务隔离级别的具体实现有了一定的认识。 一、事务的隔离级别 1、4 种隔离级别 (1)未提交读(Read uncommitted): 一个事务读取到其他事务未提交的数据,是级别最低的隔离机制; (2)提交读(Read committed): 一个事务读取到其他事务提交后的数据; (3)可重复读(Repeatable read): 一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改; (4)序列化(Serializable) : 事务串行化执行,隔离级别最高,牺牲了系统的并发性。 2、不同隔离级别解决的问题 若不考虑事务的隔离级别,则事务的并发会造成以下问题: (1)脏读: 事务A读取了事务B更新的数据,然后B回滚操作

mysql三:表操作

喜你入骨 提交于 2020-02-10 04:58:14
一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 自己的需要编写自己的存储引擎 SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。

数据库的索引和锁

荒凉一梦 提交于 2020-02-09 20:10:34
一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度 表经常进行 INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度。 -索引需要占物理和数据空间。 了解过索引的最左匹配原则 知道索引的分类:聚集索引和非聚集索引 Mysql支持Hash索引和B+树索引两种 看起来好像啥都知道,但面试让你说的时候可能就GG了: 使用索引为什么可以加快数据库的检索速度啊? 为什么说索引会降低插入、删除、修改等维护任务的速度。 索引的最左匹配原则指的是什么? Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗? 聚集索引和非聚集索引有什么区别? … 1.1聊聊索引的基础知识 首先Mysql的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 而每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。 所以说,如果我们写 select*fromuserwhereusername='Java3y’这样没有进行任何优化的sql语句

第1章 MySQL架构与历史

余生长醉 提交于 2020-02-09 19:54:34
MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式 1.1 MySQL逻辑架构 最上层服务大多数系统都有,连接处理、授权认证、安全等等 第二层包含MySQL的大多数核心功能 第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取 1.1.1 连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程。 当客户端连接到MySQL服务器时,服务器需要对其进行认证。认证基于用户名、原始主机信息和密码。如果使用了 安全套接字 SSL)的方式连接,还可以使用X.059证书认证。一旦客户端连接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限(例如,是否允许客户端对world数据库的Country表执行SELECT语句)。 1.1.2 优化与执行 MySQL会解析查询,并创建内部数据结构,然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。 对于SELECT语句,在解析查询之前

事务的特性和隔离级别

不想你离开。 提交于 2020-02-09 14:20:39
事务特性 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚, 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之 前和执行之后都必须处于一致性状态。 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不 能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 持久性(Durability)    持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 不考虑事务的隔离性,会发生的几种问题 不考虑事务的隔离性会发生以下情况:    1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据   2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。   3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。 事务的隔离级别: 现在来看看 MySQL

suoyin

我与影子孤独终老i 提交于 2020-02-09 12:30:38
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树. 对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件

mysql多表查询与事务

泄露秘密 提交于 2020-02-09 01:22:50
多表查询 内连接查询 select * from emp,dept where emp.dept_id = dept.id; select * from emp join dept on emp.dept_id = dept.id; 外连接查询 左外连接:left join on 左表的所有数据,右表有关联的数据就显示,没有就不显示(null) 右外连接:rigth join on 右表的所有数据左表有关联的数据就显示,没有就不显示(null) 子查询 单行单列:= ,> ,< 将子查询的结果作为主查询的条件 多行单列:in(2,3) 将子查询的结果作为主查询的条件 多行多列 将子查询作为虚拟表和主表进行关联 事务 概念:一个业务包含多个操作(增删改),将这个业务用事务管理,这几个操作要么同成功,要么同时失败。 开启事务:start transaction 提交事务:没有问题,commit 回滚事务:有问题:rollback 事务的四大特性 原子性 持久性 隔离性 一致性 事务的隔离级别 读未提交 脏读,不可重读,幻读 读已提交(oracel) 不可重读,幻读 可重复读(mysql) 幻读 串行化 解决所有问题 注意:安全性越来越高,性能越来越低 来源: CSDN 作者: a远方少年 链接: https://blog.csdn.net/weixin_42623237/article