事务隔离级别

理解乐观锁与悲观锁

坚强是说给别人听的谎言 提交于 2020-03-16 08:05:44
  DBMS中并发控制的任务是确保多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性   乐观锁和悲观锁是并发控制主要采用的技术手段。   无论是乐观锁还是悲观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库中有乐观锁和背锅所的盖面,其他很多地方都有类似的概念。   针对不同的业务场景,应该选用不同的并发控制方式,所以,不要把乐观锁和悲观锁下一的理解为DBMS中的概念,更不要把他们和数据库中提供的锁机制混为一谈。其实,在DBMS中,悲观锁正式利用数据库本身的锁机制来实现的。   悲观锁   在关系数据库中,悲观锁是一种并发控制的方法,它可以组织一个事务一影响其他用户的方式来修改数据。如果一个事务执行的操作嗾使某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。   悲观锁主要用于数据征用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。   悲观锁指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往一句数据库提供的锁机制(也只有数据库层提供的锁机制擦能真正保证数据访问的排他性,否则,及时在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)   在数据库中

数据库死锁

醉酒当歌 提交于 2020-03-15 23:50:09
在讨论锁之前,可能会引入事务的隔离级别。尴尬的说,有点忘记了。 数据库死锁相对还比较常见,突然也让我想到了 goroutine 的 deadlock 。说下我的理解:死锁,其实是一种无尽的相互等待。 尝试通俗地描述一下死锁的过程: 路人甲和路人乙合租,两人公用一个卫生间 早上,路人甲醒的早,直接去了卫生间,但没有带手纸。想等路人乙醒了之后给他送手纸 路人乙起床后,拿上了手纸,想等路人甲赶紧从卫生间出来 昨晚,线上环境又 deadlock 报警。遗憾的是,虽然我知道发生死锁的原因,但不知道原因的原因。最后还是根据 DBA 同事提供的日志得出了判断。 在分析之前,先通过如下表格,了解一下数据库常见的锁: X IX S IS X Conflict Conflict Conflict Conflict IX Conflict Compatible Conflict Compatible S Conflict Conflict Compatible Compatible IS Conflict Compatible Compatible Compatible 简化描述一下,昨晚线上死锁的情况。下面对语句做了简化: 事务一 update friends set name = "道道法" where id = 1 事务二 update friends set name = "道道法" where

Oracle事务

孤街浪徒 提交于 2020-03-15 11:52:17
目录 一、事务的基本概念 二、事务的特征 1、原子性(Atomicity) 2、一致性(Consistency) 3、隔离性(Isolation) 4、持久性(Durability) 三、事务控制 1、设置事物属性 2、数据异常 3、选择隔离层 4、保存点 四、版权声明 一、事务的基本概念 在数据库中事务是工作的逻辑任务,一个事务是由一个或一组SQL语句组成,通过事务机制确保这一组SQL语句的操作要么全部成功执行成功,完成整个工作任务,如果任何一条SQL执行失败,对数据表所做的操作全部撤销。 事务的目的就是为了保证数据的完整性,以银行转换业务为例: A用户向B转账1000元,步骤如下: 1)A用户账户余额减少1000元; 2)B用户账户余额增加1000元; 3)记录A用户的交易日志。 4)记录B用户的交易日志。 一笔转帐交易将产生四次数据库操作,要么全部都成功,如果有一个失败,其它操作也应该全部被撤销。 转账交易有四次数据库操作,即四条SQL语句,第一条SQL执行的时候是事务的开始,如果全部的SQL语句执行成功,提交事务,如果有任何一条SQL语句执行失败,回滚事务。 commit; -- 提交事务。 rollback; -- 回滚事务。 二、事务的特征 对一组SQL语句操作构成的事务,数据库系统必须保证这些操作的原子性、一致性、隔离性和持久性,即ACID原则。 1、原子性

JavaEE 之 Spring Data JPA

牧云@^-^@ 提交于 2020-03-15 09:30:41
1.事务   a.事务的关键属性(ACID)     ①原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用     ②一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功     ③隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏     ④持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中   b.事务的传播行为     ①REQUERED——PROPAGATION_REQUIRED       支持当前事务,如果没有事物则新建事物----最常用     ②SUPPORTS       支持当前事务,如果没有事物,则以非事物的模式进行     ③MANDATORY       支持当前事务,如果当前没有事物,则抛出异常     ④REQUIRES-NEW       新建一个事物,如果当前存在事物,则将当前事务挂起     ⑤NOT-SUPPORTED       以非事物的方式进行,如果当前有事物则将事物挂起     ⑥NEVER       以非事物的方式进行,如果有事物则挂起     ⑦NESTED       如果当前存在事物,则嵌套在事物内进行,如果当前没有事物

Spring事务传播及数据库事务操作

不羁岁月 提交于 2020-03-15 09:27:33
从Spring 事务配置说起   先看看Spring 事务的基础配置 <aop:aspectj-autoproxy proxy-target-class="true"/>   <bean id="transactionManager"     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">     <property name="dataSource" ref="dataSource"/>   </bean>   <tx:annotation-driven transaction-manager="transactionManager"/>   <!-- 配置事务传播特性-->   <tx:advice id="transactionAdvice" transaction-manager="transactionManager">     <tx:attributes>       <tx:method name="add*" propagation="REQUIRED"       rollback-for="Exception,RuntimeException,SQLException"/>       <tx:method name="remove*" propagation=

Spring事务的一些特性

本小妞迷上赌 提交于 2020-03-15 09:23:08
事务的四大特征 1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并发执行的事物之间互不干扰 4.持久性:一个事物一旦提交,它对数据库的改变就是永久的 五个隔离级别 1.default:默认的事务隔离级别,跟具体的数据有关,mysql默认的事务隔离级别是repeatable_read 2.read_uncommitted: 读未提交,一个事务可以感知或者操作另外一个未提交的事务,可能会出现脏读、不可重复读、幻读 3.read_committed:读已提交,一个事务只能感知或者操作另一个已经提交的事务,可能会出现不可重复读、幻读 4.repeatable_read:可重复读,能够避免脏读,不可重复读,不能避免幻读 4.serializable:串行化,隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。 七个传播特性 1、Propagation.REQUIRED 调用方已经存在事务,则加入到同一个事务中运行,否则,自启一个事务 2、Propagation.REQUIRES_NEW 无论何时自身都会开启新事务 3、Propagation.SUPPORTS 调用方存在事务,则加入到同一个事务中运行,若不存在事务,则以非事务的方式运行 4

Spring中的事务管理

北慕城南 提交于 2020-03-15 09:20:16
一、事务简介 事务管理是企业级应用程序开发中必不可少的技术, 用来确保数据的完整性和一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性(ACID) 原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏. 持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中 Spring 中的事务管理 作为企业级应用程序框架,Spring 在不同的事务管理 API 之上定义了一个抽象层. 而应用程序开发人员不必了解底层的事务管理 API, 就可以使用 Spring 的事务管理机制. Spring 既支持编程式事务管理, 也支持声明式的事务管理. 编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚. 在编程式管理事务时, 必须在每个事务操作中包含额外的事务管理代码. 声明式事务管理:

一致性读

醉酒当歌 提交于 2020-03-14 11:16:08
视图 view,它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。 另一个是 InnoDB 在实现 MVCC 时用到的一致性读视图,即 consistent read view,用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔离级别的实现。 事务的可重复读的能力是怎么实现的? 可重复读的核心就是一致性读(consistent read);而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。 读提交的逻辑和可重复读的逻辑类似,它们最主要的区别是: 在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图; 在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。 一致性读具体实现 InnoDB 里面每个事务有一个唯一的事务 ID,叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请的,是按申请顺序严格递增的。 而每行数据也都是有多个版本的。每次事务更新数据的时候,都会生成一个新的数据版本,并且把 transaction id 赋值给这个数据版本的事务 ID,记为 row trx_id。同时,旧的数据版本要保留,并且在新的数据版本中,能够有信息可以直接拿到它。也就是说

Spring事务传播属性和隔离级别

青春壹個敷衍的年華 提交于 2020-03-13 13:05:49
一、Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。 2) MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。 3) NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 4) NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 5) REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 6) SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 7) NESTED 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。 PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别: 它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。 使用PROPAGATION_REQUIRES_NEW时

SQL Server,MySQL,Oracle三者的区别

僤鯓⒐⒋嵵緔 提交于 2020-03-13 07:28:39
SQL Server,MySQL,Oracle三者的区别 Oracle Oracle 能在所有主流平台上运行(包括Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持,Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。Oracle获得最高认证级别的ISO标准认证.Oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录Oracle多层次网络计 算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。 Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上 不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。能与多种通讯网络相连,支持各种协议(TCP/IP、 DECnet、LU6.2等)。提供了多种开发工具