事务隔离级别

Spring事务控制

我怕爱的太早我们不能终老 提交于 2020-01-24 21:12:14
事务控制 spring中基于XML的声明式 配置事务管理器 配置事务的通知 tx:method isolation:用于指定事务的隔离级别,默认为DEFAULT,表示使用数据库的默认隔离级别。 propagation:用于指定事务的传播行为,默认值为REQUIRED,表示是一定会有事务,增删改查的选择。查询方法可以选择SUPPORTS read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认值为false,表示读写 rollback-for:用于指定一个异常,当发生该异常时,事务回滚,产生其他异常时事务不回滚。没有默认值,表示任何异常都回滚 no-rollback-for:用于指定一个异常,事务不回滚,产生其他异常时事务回滚,没有默认值,表示任何异常都回滚 timeout:用于指定事务的超时时间,默认值为-1,表示永不超时。如果指定了该值,以秒为单位。 使用tx:advice标签配置事务通知 id:唯一标识 transaction-manager:事务管理器引用 配置aop通用切入点表达式 建立事务通知和切入点表达式的对应关系 示例 <!--配置连接池--> < bean id = " dataSource " class = " org.springframework.jdbc.datasource.DriverManagerDataSource " > <

mysql性能优化

旧街凉风 提交于 2020-01-24 13:46:15
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi /etc/my.cnf [mysqld]中添加: query_cache_size = 20M #缓存的大小

mysql的ACID的理解

 ̄綄美尐妖づ 提交于 2020-01-24 10:16:05
这是在网上copy下来的ACID的概念,可以直接跳过看后面: 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。 其中,原子性和持久性的概念比较好理解。但是最近发现老是把一致性和隔离性混淆。 个人理解,隔离性主要是针对读操作的。在不同事务之间,读操作隔离。比如另一个事务对数据修改后,会不会影响当前事务的读操作,要不要读到更新后的数据。 一致性,主要强调的是数据的更新是不是“正确”,即,是不是符合我们的预期,这个和读操作应该是要分开看待的,这里应该只强调写操作。 造成我对这俩个概念的混淆的原因是,在java的并发编程中,我们关注的似乎只有一致性

Spring 事务归纳

雨燕双飞 提交于 2020-01-23 22:30:39
Spring transaction 什么是事务 A用户向B用户转帐100,第一步要从A帐户扣出100,第二步要将B帐户加上100。其中无论是第一步失败,还是第二步失败。都应该将A、B帐户的余额保持和转帐操作之前一致。 事务就是一系列相关联操作的集合,一个事务可以是多个步骤组成,如果一个步骤失败,那么整个流程都应该回滚到初始状态。 事务的四个特性 原子性(Atomicity) 一个事务是一个整体,无论有多少个步骤组成,要么所有步骤都成功,要么所有步骤都失败。 一致性(Consistency) 一个事务完成(无论是成功还是失败),所有的业务都应该处于一致的状态,不应该部分步骤成功,部分步骤失败,显示中的数据一致性不会被破坏。 隔离性(Isolation) 多个事务处理相同的数据的时候,事务间应该是相互隔离的,防止数据损坏。 持久性(Durability) 一旦事务完成,无论系统发生什么异常,结果都不应该受到影响,通常事务的结果被写入到数据库中。 Spring处理事务的核心接口 Spring涉及到事务管理的核心接口相互关系如下 Spring并没有直接提供事务管理的实现,而是提供了一个接口PlatformTransactionManager。具体的实现依赖项目中所使用的持久化接口。 PlatformTransactionManager 定义了所有的具体实现类必须要有的方法

事务详解

人走茶凉 提交于 2020-01-23 01:27:59
事务 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 而一个逻辑工作单元要成为事务,就必须满足ACID属性。 事务的四大特性(ACID): 原子性(atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位. 事务中的操作要么都不做,要么就全做。 一致性(consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 例:拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态。 隔离性(Isolation) 一个事务的执行不能被其他事务干扰 隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别 脏读 不可重复读 幻读

My SQL 学习打卡 60天搞定mysql

最后都变了- 提交于 2020-01-22 15:34:03
Day01--查询语句执行流程   mysql 基础架构:        MySQL 5.5.5 版本开始InnoDB成为了默认存储引擎   连接器:   链接器超时断开参数 wait_timeout 默认 8小时   缓存   mysql 缓存提供按需使用的方式 将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定   MySQL 8.0 版本直接将查询缓存的整块功能删掉了 mysql> select SQL_CACHE * from T where ID=10;   分析器:   分析器先会做“词法分析”。再做“语法分析”    优化器:   优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。   执行器:   首先判读用户对表有没有查询权限。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。   数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的 Day02--更新语句执行流程   更新比查询多涉及两个日志模块 redo log 和

事务隔离级别与实现——事务隔离:为什么你改了我还看不见?

谁都会走 提交于 2020-01-22 09:56:52
参考文章: https://time.geekbang.org/column/article/68963 目录 隔离性与隔离级别 事务隔离的实现 事务的启动方式 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。 MySQL 原生的 MyISAM 引擎就不支持事务,本文以 InnoDB 为例,剖析 MySQL 在事务支持方面的特定实现。 隔离性与隔离级别 1、事务的隔离性:ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性) 2、并发问题:脏读、不可重复读、幻读 3、隔离级别:读未提交、读提交、可重复读、串行化 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。 举例: mysql> create table T(c int) engine=InnoDB; insert into T(c) values(1); 在实现上

转 事务隔离级别

可紊 提交于 2020-01-22 09:03:52
http://msdn.microsoft.com/zh-cn/library/ms173763.aspx SET TRANSACTION ISOLATION LEVEL (Transact-SQL) 更新日期: 2006 年 4 月 14 日 控制到 SQL Server 的连接发出的 Transact-SQL 语句的锁定行为和行版本控制行为。 Transact-SQL 语法约定 语法 SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } [ ; ] 参数 READ UNCOMMITTED 指定语句可以读取已由其他事务修改但尚未提交的行。 在 READ UNCOMMITTED 级别运行的事务,不会发出共享锁来防止其他事务修改当前事务读取的数据。 READ UNCOMMITTED 事务也不会被排他锁阻塞,排他锁会禁止当前事务读取其他事务已修改但尚未提交的行。 设置此选项之后,可以读取未提交的修改,这种读取称为脏读。 在事务结束之前,可以更改数据中的值,行也可以出现在数据集中或从数据集中消失。 该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 NOLOCK 相同。这是隔离级别中限制最少的级别。 在

mysql 事务的ACID特性

老子叫甜甜 提交于 2020-01-21 03:16:47
原子性(Atomicity) 一个事务事务的操作要么全部成功,要么全部失败 一致性(Consistency) 事务开始之前和结束之后,数据库的完整性没有被破坏,写入的资料完全符合所有的预设的规则 这里一致性可能比较难理解,比方说:A转账给B用户100元,但是A只有90元,转完之后A就是-10元了,站在数据结构层是没有问题的,但是在应用层,这个就不符合预设的规则(我们要保证用户的钱>=0) 隔离性(Isolation) 数据库允许并发的事务同时对数据库读写和修改的能力,可以防止多个事务并发执行时导致数据不一致性 持久性(Durability) 事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失 三 事务并发带来的问题 3.1 脏读 1.事务B更新年龄18 2.事务A读取数据库信息,年龄是18 3.事务B回滚 那么这个就是脏读 3.2 不可重复读 1.事务A先读取数据,年龄为16 2.事务B跟新数据,年龄为18 3.事务B提交 4.事务A再读取数据,年龄为18 事务A连续读取两次的数据都不一样,为不可重复读 3.3 幻读 1.事务A读取年龄大于15的数据,发现有1条记录 2.事务B插入一条记录,并提交 3.事务A再读取年龄大于15的数据,发现有2条记录 事务A就好像出现了幻觉一样,一般幻读出现在范围查询 解决上面的3个问题,就要通过事务的隔离性来解决了

性能调优,程序员转型架构师的拦路虎【3】

丶灬走出姿态 提交于 2020-01-21 01:26:47
性能调优系列前序文章索引: 程序员必须掌握的性能调优 :老兵哥结合个人经历解释了程序员往架构师方向发展时为什么要跨越性能调优这一关,以及介绍了从 X、Y、Z 三个维度优化性能的思路。 从 X 维度优化系统的性能 :老兵哥分享了从 X 维度优化系统性能的思路,包括让客户端分计算存储任务、优化交互设计等,主要是作为引子拓宽我们性能调优的思路。 应用容器 Tomcat 性能调优 :Y 维度就是从业务 HTTP 请求的横向处理流程来看,HTTP 请求会穿越网络、计算机、应用容器(Tomcat)、Spring、ORM(Hibernate)、数据库等节点,在这个流程中每个节点都有许多可以可优化的地方,此文主要介绍通过优化应用容器(Tomcat)来优化系统性能的方法。 程序员在转型架构师的过程中需要建立流程化、结构化、系统化的思维方式,而性能调优是非常难得的契机,它既给了我们压力,也给了我们动力,跨越它就是突破自己的过程。建议在阅读本文内容前,先参考下面这个系列的文章了解 Web 应用是怎样处理 HTTP 请求的: 图解 Spring:HTTP 请求的处理流程与机制【1】 图解 Spring:HTTP 请求的处理流程与机制【2】 图解 Spring:HTTP 请求的处理流程与机制【3】 图解 Spring:HTTP 请求的处理流程与机制【4】 图解 Spring:HTTP 请求的处理流程与机制