事务隔离级别

01.31 Day 12 - 重温 Day 3

时光怂恿深爱的人放手 提交于 2020-02-06 09:12:14
大家好,我是 Snow Hide,作为《MySQL 实战》这个专栏的学员之一,这是我打卡的第 12 天,也是我第 59 次进行这种操作。 今天我温习了该专栏里一篇叫《事务隔离:为什么你改了我还看不见?》的文章。 关键词总结:隔离性与隔离级别、(隔离级别(读未提交、读提交、可重复读、串行化)、隔离级别的事务效果(读未提交、读提交、可重复读、串行化))、事务隔离的实现、事务的启动方式(显式启动、隐式启动)。 所学总结: 《事务隔离:为什么你改了我还看不见?》 隔离性与隔离级别 解决脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)等问题。 隔离级别 读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)以及串行化(serializable)。 读未提交 事务提交之前其所做的变更可被其他事务看见。 读提交 事务提交之后其所做的变更才可被其他事务看见。 可重复读 事务执行过程看到的数据总是和事务在启动时看到的数据一致。事务提交之前其所做的变更对其他事务不可见。 串行化 对于同一条记录,写时加写锁,读时加读锁。出现读写锁冲突时需要等事务执行完成才能继续。 隔离级别的事务效果 读未提交 虽然事务 B 还未提交,但事务 A 能看到其结果。 读提交 事务 B

一文让你搞懂Spring的统一事务模型

拟墨画扇 提交于 2020-02-06 05:58:00
Spring事务的知识体系 进入主题之前,先来了解一下Spring事务,都有哪些内容: Spring事务包含对 分布式事务 和 单机事务 的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。 单机事务,按照用法分,又可以分为 编程式事务模型 (TransactionTemplate)和 声明式事务模型 (@Transactional注解),后者可以理解为 aop + 编程式事务模型。 编程式事务模型里面涉及到很多知识点,比如统一事务模型、事务传播级别、事务隔离级别等。 我们今天要讲的是其中一点, 统一事务模型 。 希望这次的分享能够让大家,对Spring事务有一个整体性的认识。 不仅仅是Template Spring的统一事务模型,解决的一个核心问题,就是不管你用的是什么数据访问方式,Hibernate、MyBatis抑或是JDBC, 你的Service层的代码都是一样的,不需要做任何变动。 使用@Transactional注解的,相信大家都用过,而且由于注解的实现比较隐晦,不利于我们理解原理,这里就不演示。 下面介绍编程式事务模型, TransactionTemplate : 不管后面你的Dao实现如何变化,上面这一段Service代码都无需修改,而且依旧可以保持事务的逻辑。 Spring是怎么做到的呢? 有人说,是 模板模式 。

一文让你搞懂Spring的统一事务模型

我的未来我决定 提交于 2020-02-06 05:45:48
Spring事务的知识体系 进入主题之前,先来了解一下Spring事务,都有哪些内容: Spring事务包含对 分布式事务 和 单机事务 的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。 单机事务,按照用法分,又可以分为 编程式事务模型 (TransactionTemplate)和 声明式事务模型 (@Transactional注解),后者可以理解为 aop + 编程式事务模型。 编程式事务模型里面涉及到很多知识点,比如统一事务模型、事务传播级别、事务隔离级别等。 我们今天要讲的是其中一点, 统一事务模型 。 希望这次的分享能够让大家,对Spring事务有一个整体性的认识。 不仅仅是Template Spring的统一事务模型,解决的一个核心问题,就是不管你用的是什么数据访问方式,Hibernate、MyBatis抑或是JDBC, 你的Service层的代码都是一样的,不需要做任何变动。 使用@Transactional注解的,相信大家都用过,而且由于注解的实现比较隐晦,不利于我们理解原理,这里就不演示。 下面介绍编程式事务模型, TransactionTemplate : 不管后面你的Dao实现如何变化,上面这一段Service代码都无需修改,而且依旧可以保持事务的逻辑。 Spring是怎么做到的呢? 有人说,是 模板模式 。

mysql事务隔离界别与锁机制

你说的曾经没有我的故事 提交于 2020-02-05 22:58:43
数据库锁 共享锁(Shared lock) 例1: ---------------------------------------- T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: update table set column1='hello' 过程:T1运行 (加共享锁) T2运行等待T1运行完之后再运行T2 之所以要等,是因为T2在执行update前,试图对table表加一个排他锁,而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。 例2: ---------------------------------------- T1: select * from table T2: select * from table 这里T2不用等待T1执行完,而是可以马上执行。 分析: T1运行,则table被加锁,比如叫lockA T2运行,再对table加一个共享锁,比如叫lockB。 两个锁是可以同时存在于同一资源上的(比如同一个表上)。这被称为共享锁与共享锁兼容。这意味着共享锁不阻止其它session同时读资源,但阻止其它session update 例3: ---------------------------------

mysql(2)

爷,独闯天下 提交于 2020-02-05 21:27:11
1、DQL查询数据 1.1、DQL (Data Query LANGUAGE : 数据查询语言) 所有的查询操作都用它 Select 简单的查询,复杂的查询它都能做~ 数据库中最核心的语言,最重要的语句 使用频率最高的语句 1.2、指定查询字段 SELECT * FROM student SELECT * FROM result -- 查询指定字段 SELECT ` studentNo ` , ` studentname ` FROM student -- 别名 给结果起一个名字 SELECT ` studentNo ` AS 学号 , ` studentname ` AS 姓名 FROM student -- 函数 Concat(a,b) SELECT CONCAT ( '姓名:' , studentname ) AS 新名字 FROM student 语法: SELECT 字段,... FROM 表 去重 作用:去除SELECT 查询出来的结果中重复的数据,重复的数据只显示一条 -- 去重 SELECT * FROM result SELECT ` studentno ` FROM student SELECT DISTINCT ` studentno ` FROM student 数据库的列 SELECT VERSION ( ) -- 查询系统版本 SELECT 90 - 2

简单明了的SQL join解释

纵然是瞬间 提交于 2020-02-05 08:48:21
1. 数据库表锁定原理 1.1 目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来访问DB,其中也会同时存取同一份数据,会造成数据的不一致性或者读脏数据. 1.2 事务的ACID原则 1.3 锁是关系数据库很重要的一部分, 数据库必须有锁的机制来确保数据的完整和一致性. 1.3.1 SQL Server中可以锁定的资源: 1.3.2 锁的粒度: 1.3.3 锁的升级: 锁的升级门限以及锁升级是由系统自动来确定的,不需要用户设置. 1.3.4 锁的类型: (1) 共享锁: 共享锁用于所有的只读数据操作. (2) 修改锁: 修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象 (3) 独占锁: 独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。 (4) 架构锁 结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言操作时,SQL Server采用Sch-M锁,编译查询时,SQL Server采用Sch-S锁。 (5) 意向锁 意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。 (6) 批量修改锁 批量复制数据时使用批量修改锁 1.3.4 SQL Server锁类型 (1) HOLDLOCK: 在该表上保持共享锁,直到整个事务结束

数据库存储引擎

假如想象 提交于 2020-02-05 07:28:21
mysql存储引擎概述 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 一种类型表明的是一种存储方式 存储引擎:就是表的类型,不同的类型就会对应不同的处理机制去处理他 事务:就是要么同时成功,要么同时不成功 mysql支持哪些存储引擎? mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。 其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 各种存储引擎的特性 InnoDB MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB

spring 面试问题

℡╲_俬逩灬. 提交于 2020-02-04 18:26:17
spring bean 的作用域 1.singleton:唯一bean实例,Spring中的bean默认都是单例的。 2.prototype:每次请求都会创建一个新的bean实例。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 spring mvc 的工作流程 一个请求→DispatcherServlet根据请求信息调用HandlerMapping→转发到固定handler上即Controller→处理完业务后返回ModelAndView对象→DispatcherServlet把返回的Model传给View 最后返回浏览器。 spring 当中的设计模式 单例 工厂(BeanFactory) 代理 springaop(面向切面代理接口)适配器模式(springmv分配hanglermapping) 装饰模式 给类添加额外职责(Decorator) 观察者模式(spring驱动事件) 策略模式(访问resource接口 不同的 resource) 模板模式 spring 控制事务的几种方式 1编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()

InnoDB的事务和锁——事务到底是隔离的还是不隔离的?

瘦欲@ 提交于 2020-02-04 18:02:06
参考文章: https://time.geekbang.org/column/article/70562 目录 引例 1、表结构 2、事务执行流程 3、事务启动方式 4、“视图”概念 “快照”在 MVCC 里是怎么工作的? 1、行状态变更及多版本 2、可重复读 3、一致性视图 4、数据版本的可见性规则 4、事务A返回的结果为什么是k=1? 判断方式一:利用数据版本的可见性规则 判断方式二:时间先后顺序判断 更新逻辑 假设事务 C 不是马上提交的,而是变成了下面的事务 C’,会怎么样呢? 事务的可重复读的能力是怎么实现的? 在读提交隔离级别下,结果如何? 引例 1、表结构 一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢? CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; insert into t(id, k) values(1,1),(2,2); 2、事务执行流程 图 1 事务 A、B、C 的执行流程 可重复读隔离级别下:【 事务 B 查到的 k 的值是 3,而事务 A

理解事务

淺唱寂寞╮ 提交于 2020-02-04 11:09:37
文章目录 事务的介绍 事务的特性`ACID` 事务的类别 事务的管理 @Transactional 注解 事务的传播行为 事务隔离级别有哪些?MySQL的默认隔离级别是? 事务是什么时候提交的? 嵌套事务(子事务) 事务的介绍 事务是逻辑上的一组操作,要么都执行,要么都不执行。 简单来说事务的目的就是为了 保证数据的一致性 。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务的主要职责是管理我们对数据库的 insert , update , delete 操作,保证SQL要么全部执行,要么全部不执行。 事务的特性 ACID 原子性( A tomicity) 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性( C onsistency) 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性( I solation) 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。(事务隔离的级别在下文可以继续看到详细内容) 持久性( D urability) 事务处理结束后,对数据的修改就是永久的