事务隔离级别

数据库隔离级别,读已提交,读未提交

╄→гoц情女王★ 提交于 2019-12-03 10:38:06
同样是后端开发,年薪50万和年薪20万的差距在哪里>>> 数据库 事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决 脏读、不可重复读、幻读 这几类问题。 √: 可能出现 ×: 不会出现 事务的隔离级别 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed--Sql Server , Oracle × √ √ Repeatable read-- MySQL × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个事务并发的情况下,因此,接下来的讲解都围绕 事务并发 。 Read uncommitted 读未提交 公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是5000元整,非常高兴。可是不幸的是,领导发现发给singo的工资金额不对,是2000元,于是迅速回滚了事务,修改金额后,将事务提交,最后singo实际的工资只有2000元,singo空欢喜一场。 出现上述情况,即我们所说的脏读,两个并发的事务,“事务A:领导给singo发工资”、“事务B:singo查询工资账户”

事务总结

吃可爱长大的小学妹 提交于 2019-12-03 10:35:32
事物的传播行为:   事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的时事务如何传播。     Spring中七种事务传播行为: 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 事物的隔离级别:    ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应;   ISOLATION_READ

事务

馋奶兔 提交于 2019-12-03 10:34:34
一,事务的含义 : 事务 (TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。多个操作作为一个整体向系统提交,要么都执行,要么都不执行。事务是一个不可分割的逻辑单元。 二,事务的特性(ACID): 原子性 (Atomicity): 事务是一个 完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行。 一致性 (Consistency): 当事务完成时,数据必须处于 一致的状态。 隔离性 (Isolation): 并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事务。 持久性 (Durability): 事务完成后,它对数据库的修改被永久保持。 在Spring中,所有操作事务的类都继承自 PlatformTransactionManager 三,事务的隔离级别 ISOLATION_READ_UNCOMMITTED:读未提交 ISOLATION_READ_COMMITTED:读已提交 ISOLATION_REPEATABLE_READ:可重复读 ISOLATION_SERIALIZABLE:串行化 四,脏读,不可重复读,幻读(虚读) 脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的。 不可重复读 : 不可重复读是指 A事务读取了B事务已经提交的更改数据

spring04-transaction

隐身守侯 提交于 2019-12-03 09:52:24
spring 的事务xml配置(事务使用xml配置, 其他的ioc bean使用注解) 配置事务管理器 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 引用数据源bean --> <property name="dataSource" ref="dataSource"/> </bean> 配置事务的通知 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" read-only="false"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> 使用tx:advice标签配置事务通知 属性: id:事务的唯一标识 transaction-manager

对于MySQL数据库四种隔离等级

梦想与她 提交于 2019-12-03 09:51:14
对于MySQL事务有四种隔离级别,分别是以下四种: 1.读未提交 2.读提交 3.可重复读 4.串行化(加锁) 对于隔离我们都是说在并发的情况下发生的事情,读取的数据在并发的情况下会发生什么情况。 并且我们知道所有的事务都是原子性操作。但是在这些事务中隔离等级不一样,并发的速度和安全情况都是不一样的。等级越高,速度越慢但越安全。 1.读未提交:表示根本什么措施都没有,A读取了两次数据,但是B中间修改了一下数据,那么对于A来说,就会出现两次读取的数据不一致的情况。 2.读提交:还是A读取了两次数据,但是B中间修改了数据,这次跟上次的区别是,如果B修改数据的操作没有提交的话,A最后一次读取的数据跟第一次读取的数据是一样的值。但是如果在B提交了之后的话,A读取到的数据就是不一样了,这就是这个提交的意义,B提交和不提交的情况下,A读取的数据是不同的情况。 3.可重复读:代表无论B怎么改,只要A开始了这次事务,不论B在它的事务中修改数据没有,对A来说都是没有影响的。 换个角度是,只要A开始自己的事务,只要这个事务还没有提交,那么在这次事务中读取的数据肯定是一样的,这就是这个可重复读的重复的意思。 4:串行化:这个就是直接加锁了,对于A事务操作了数据,那么B就动不了,没有权限了。加锁嘛,就是这样。 来源: https://www.cnblogs.com/cold-windy/p

MySQL 的 4 种隔离级别,你了解么?

别说谁变了你拦得住时间么 提交于 2019-12-03 09:41:36
1、 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。 2、 事务的 ACID 事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的

数据库系统(五)---MySQL基础

怎甘沉沦 提交于 2019-12-03 09:37:31
一、SQL基本概念:   SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用 于存取数据以及查询、更新和管理关系数据库系统。 功能不仅仅是查询,还包括数据定义、数据操纵和数据控制等于数据库有关的 一系列功能。   四大功能:数据查询、数据定义、数据操纵和数据控制。   1)嵌入式和动态 SQL 规则 规定了 SQL 语句在高级程序设计语言中使用的规范方法,以便适应较为复杂的 应用。   2)SQL 调用和会话规则 调用包括 SQL 例程和调用规则,以便提高 SQL 的灵活性、有效性、共享性以 及使 SQL 具有更多的高级语言的特征。   3)关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有 数据库模式、表、索引、视图等。 SQL 标准提供的数据定义语句如下表:      二、MySQL 1、MySQL基础概念   MySQL 是一个关系数据库管理系统(RDBMS),它具有客户/服务器体系结构。 MySQL 中的 SQL 作为一种关系型数据库管理系统,遵循 SQL 标准,提供了对数据定义语言 DDL、数据操纵语言 DML、数据控制语言 DCL 的支持,同样支持关系数据库的三级模式结构。 MySQL 中一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一 个表可以有若干索引,索引也存放在存储文件中。   MySQL 在 SQL

事物的隔离级别

假装没事ソ 提交于 2019-12-03 08:06:24
Begin: mysql 事物默认是自动提交的 select @@autocommit 查询 (1表示自动提交 ,0表示不自动提交) set @@autocommit =0 select @@transaction_isolation 查询事物的默认属性 事物: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。 例如:A——B转帐,对应于如下两条sql语句 update account set money=money-100 where name=‘a’; update account set money=money+100 where name=‘b’; 事物特性acid 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 涉及命令 commit() rollback() start

SQL Server 事务

二次信任 提交于 2019-12-03 07:48:13
事务全部是关于原子性的。原子性的概念是指可以把一些事情当做一个单元来看待。从数据库的角度看,它是指应全部执行或全部不执行的一条或多条语句的最小组合。 事务4个属性 原子性(Atomicity) :事务必须是原子工作单元。对于其数据修改,要么全部执行,要么全不执行。 一致性(Consistency) :事务在完成时,必须使所有的数据都保持一致状态。 隔离性(Isolation) :有并发事务所做的修改必须与任何其他并发事务所做的修改隔离。 持久性(Durability) :事务完成之后,它对与系统的影响是永久的。 事务需要能够定义非常非常明确的边界。事务要有非常明确的开始和结束点。SQL Server中的每一条SELECT、INSERT、UPDATE和DELETE语句都是隐式事务的一部分。即使只发出一条语句,也会包这条语句当做一个事务-要么执行语句中的所有内容,要么什么都不执行。但是如果需要的不只是一条可能是多条语句。在这种情况下,就需要有一种方法来标记事务的开始和结束,以及事务的成功或失败。可以使用一些T-SQL语句在事务中“标记”这些点。 Begin Tran:设置起始点 Commit Tran:使事务成为数据库中永久的,不可逆的一部分 RollBack Tran:将数据恢复到修改前的内容 Save Tran:创建一个特定标记符,只允许部分回滚 步骤

事务与锁

天大地大妈咪最大 提交于 2019-12-03 07:25:00
事务 初学的时候,感觉事务的四大特性就那么回事,不就是一堆事要么完成,要么全部失败吗。还有经常说的脏读,幻读,不可重复读根本无法理解,就是那个存款取款的例子,我修改了数据,对方看到我修改的数据,这不很正常吗。现在看来,当时根本就不知道并发是什么鬼,更何谈并发事物了。 然后给你来一堆名词,共享锁,排它锁,悲观锁,乐观锁...... 想想就觉得那时候能记下来已经是奇迹了。 Spring 还给事务弄了一个传播机制的家伙, Spring 事务传播机制可以看这篇文章 。 本文应该来说是对初学者的福音,有一定经验的人看的话应该也会有收获。 事务的四大特性ACID 这个是刚入门面试的时候必问一个 面试题 ,刚入行的时候我是硬生生背下来的。 原子性(Atomicity) 一件事情的所有步骤要么全部成功,要么全部失败,不存在中间状态。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation) 两个事务之间是隔离程度,具体的隔离程度由隔离级别决定,隔离级别有 读未提交的 (read-uncommitted) 读提交的 (read-committed) 可重复读 (repeatable-read) 串行 (serializable) 持久性 (Durability) 一个事务提交后