隔离级别

事务与事务隔离级别

左心房为你撑大大i 提交于 2020-03-08 05:28:49
oracle事务 事务含义:组成单个逻辑单元的一系列操作。 事务特征: 第一、原子性,即不可分割性; 第二、一致性,保证数据更新前后与业务的一致性; 第三、隔离性,多个事务不相影响; 第四、持久性,事务提交后数据将永久存储杂数据库。 隔离级别 : 1.未提交读(read uncommitted):会出现脏读、不可重复读和幻读。脏读的设计只是为了提供非阻塞读,但是对于oracle来说,默认就提供非阻塞读, 即查询不会受到任何增删改操作的影像,因为oracle提供了undo来存放更新前的数据。 2.提交读(read committed):会出现不可重复读和幻读。oracle的默认事务隔离级别。 3.重复读(repeatable read):会出现幻读。 4.串行化(serializable):隔离级别最高,不允许出现脏读、不可重复读和幻读。即一个事务执行结束了另一个事务才能执行。当然并发性也就最差。 除了这四种,oracle还提供read only隔离级别,即只支持读,在该级别中,该事务只能看到事务开始那一刻提交的修改。 脏读、不可重复读、幻读含义 脏读:一个事务可以读物另一个事务未提交的数据。 不可重复读:在一个事务中不同时间段查询出现不同的结果,可能被更新可能被删除。 幻读:在一个事务中不同时间段查询,记录数不同。与不可重复读的区别是:在幻读中,已经读取的数据不会改变

MySQL 事务及事务的隔离级别

回眸只為那壹抹淺笑 提交于 2020-03-03 20:01:07
什么是事务 通过一组逻辑操作单元(一组DML——sql语句),将数据从一种状态切换到另外一种状态。 事务的特点(遵循ACID原则) 原子性(atomicity) :最小的执行单元。(要么全成功,有一条失败则回滚到最初状态)要么都执行,要么都回滚 一致性(consistrncy) :保证数据的状态操作前和操作后保持一致,即事务的执行使得数据库从一种正确状态转换为另一种正确的状态。 隔离性(isolation) :多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰 持久性(durability) :一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改 事务的作用 : 事务管理对于企业级应用而言至关重要,它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性。就像银行的自动提款机ATM,通常ATM都可以正常为客户服务,但是也难免遇到操作过程中及其突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过ATM机一样,以保证用户和银行的利益都不受损失。 相关步骤: 1、开启事务 2、编写事务的一组逻辑操作单元(多条sql语句) 3、提交事务或回滚事务 事务控制语句 : begin/ start transaction:开启事务 commit:提交事务 rollback:回滚事务

spring 事务隔离级别配置

こ雲淡風輕ζ 提交于 2020-03-03 05:29:38
声明式的事务处理中,要配置一个切面,即一组方法,如 Java代码 <!-- 声明式事务管理 --> <!-- 隔离级别配置--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="query*" propagation="SUPPORTS" read-only="true" /> <tx:method name="list*" propagation="SUPPORTS" read-only="true" /> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation=

事务特性及隔离级别

喜你入骨 提交于 2020-03-03 00:16:26
一、事务特性 1. 原子性 事务的原子性即需保证事务是一个原子操作,要么全部成功一起提交,要么全部失败一起回滚,一个事务不可能之完成其中的一部分 2. 一致性 事务的一致性,即数据库总是从一个一致性状态转换到另一个一致性状态,即不论发生异常或者是机器故障等,事务若没有最终提交,事务中所已经执行语句也不会对数据库产生影响 3. 隔离性 一个事务提交成功之前所作的操作,对其他事务是不可见的 4. 持久性 一旦事务成功提交,其对数据库数据所做的修改就会永久保存到数据库中 二、隔离级别 1. 未提交读(READ UNCOMMITTED) 事务中所执行的操作,即使未提交,也对其他事务可见(事务可以读取其他事务未提交的事件,成为脏读) 2. 提交读(READ COMMITTED) 一个事务中,看不到其他事务未提交前的所做的修改,但其他事务一旦提交,本事务中就会对其修改可见。因此,当你在一个事务中执行相同的查询操作,可能会得到不同的查询结果(中间有修改所查数据的事务提交成功),称为不可重复读 3. 可重复读(REPEATABLE READ) 可重复读是mysql中默认的隔离级别,决解了脏读的问题,该级别保证一个事务中多次相同查询的结果不变。但又产生了新的问题“幻读”,即其他事务在本事务查询范围内又重新插入数据,此时就会产生幻读,即查询结果会多出新插入数据。Innodb通过mvcc决解了这个问题

Spring声明式事务@Transactional 详解,事务隔离级别和传播行为

风流意气都作罢 提交于 2020-03-02 09:42:20
@Transactional注解支持9个属性的设置,这里只讲解其中使用较多的三个属性:readOnly、propagation、isolation。其中propagation属性用来枚举事务的传播行为,isolation用来设置事务隔离级别,readOnly进行读写事务控制。 @Service @Transactional(readOnly = true) public class AppTradeRec2Service extends BaseService { @Autowired private AppTradeRecDao appTradeRecDao; @Autowired private ConsInfoDao consInfoDao; @Transactional(readOnly = false) public void payCharge(TradeRec tradeRec) { User usr = UserUtils.getUser(); ConsInfo cons = consInfoDao.getByUser(usr.getId()); //修改交易记录 tradeRec.setPayBefore(cons.getAccountAmt()); tradeRec.setPayAfter(cons.getAccountAmt() - tradeRec

数据库事务概览

丶灬走出姿态 提交于 2020-03-01 09:40:20
事务种类 隐式事务 如单条 sql 语句的执行 显式事务 如多条 sql 语句的执行,一般谈论数据库事务时,指的是数据库的显式事务 事务特性 数据库事务具有 ACID 这4个特性 A —— Atomic /əˈtɒmɪk/ 原子性。所有 sql 作为一个原子工作单元执行,要么全部执行,要么全部不执行。这里应该是借用了化学学科的术语概念:原子虽然在物理状态中可以继续细分(原子由原子核和核外电子组成),但原子在化学反应中是不可再分。 C —— Consistent /kənˈsɪstənt/ 一致性。事务完成后,所有数据的状态都是一致的,比如我转账给你100,那么我的账户减去了100,你的账户则必定加上了100。 I —— Isolation /ˌaɪsəˈleɪʃn/ 隔离性。每个事务做的操作必须与其它事务隔离,即便有多个事务并发执行。一个事务处理时的中间状态对其它事务是不可见的。 D —— Duration /duˈreɪʃn/ 持久性。事务完成后,相关的对数据库数据的修改被持久化存储。 数据不一致问题 多个并发执行的事务,如果操作时涉及同一条记录数据,可能会发生问题,即并发操作可能导致数据的不一致问题,这些问题包含以下3种情形: 脏读(Dirty Read) 读取未提交数据 执行时间 事务A 事务B 1 事务开启 2 事务开启 修改一条记录record(假使原来数据是纯粹干净的

浅谈Spring事务隔离级别

僤鯓⒐⒋嵵緔 提交于 2020-02-29 10:54:03
一、Propagation (事务的传播属性) Propagation :  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 1: PROPAGATION_REQUIRED 加入当前正要执行的事务不在另外一个事务里,那么就起一个新的事务 比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候, ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA

TCL-事物隔离级别

爷,独闯天下 提交于 2020-02-29 00:43:48
事物控制语言:用于处理意外中断 事物 一个或一组SQL语句组成一个执行单元,要么全部执行,要么全不执行 执行失败、产生错误,整个单元将会回滚。(撤销所有操作) 所有影响的数据返回到事物开始前的状态。 如果单元中所有SQL语句执行成功,则事物被顺利执行 事物具备的属性:ACID(acid)属性 1.A原子性:代表事物是一个不可分割的工作单位(最小单位),要么全部执行,要么全不执行 2.C一致性:执行一个事物会使数据,从一个一致的状态,切换到,另一个一致的状态。(准确、完整、可靠) 3.I隔离型:一个事物的执行,不受其他事物的干扰(隔离级别控制) 4.D持久性:一个事物一旦提交数据就是永久性的改变,接下来操作和故障不会对其产生影响 删除就是删了,没办法撤销,只能重新插入 查看MySQL支持的存储引擎 SHOW ENGINES; InnoDB 当前服务器默认的存储引擎 支持事物 MEMORY 使用的也很多 不支持事物 MyISAM 5.5版本之前使用的 不支持事物 事物的创建 隐式事物(自动事物) 事物没有明显的开启和结束的标记(自动的开启自动的结束) 比如insert、update、delete语句 显示事物 事物具有明显的开启和结束的标记 将两个隐式语句和为一个事物 前提:必须禁用自动提交 禁用自动提交:set autocommit=0; 只正对当前事物有效,不是永久关闭 案例:转账

事务隔离级别的遇到的坑

喜欢而已 提交于 2020-02-28 07:32:20
有以下四种隔离级别 1.READ-UNCOMMITTED(读取未提交内容)级别 2.READ-COMMITTED(读取提交内容)级别 3.REPEATABLE-READ(可重读)级别 4.SERIERLIZED(串行化) 。 如果在事务管理器中未设置事务隔离级别,就默认使用数据库的隔离级别,oracle为read_commit(读已提交) public class test { @Autowired private Dao dao; @Transactional(value = "thunderJpaTransactionManager", rollbackFor = Exception.class) public boolean saveAndReadTest() { User user = new User(); user.setId(1); dao.save(user); User user = dao.findById(1); //因为处于同一个事务中,所以是可以实时获取的 ...... } } 同一事务中,是可以读取未提交的数据 那么什么时候是不同的事务呢? 答:A线程调用saveAndReadTest()方法,B线程调用saveAndReadTest()方法,虽然调用的是相同的方法,但是事务是不同的,所以B线程中无法读取A中未提交的数据 我们可以通过dao

事务隔离级别(IsolationLevel)

好久不见. 提交于 2020-02-25 19:54:29
来源: https://www.cnblogs.com/wms01/p/6183241.html 事务隔离级别(IsolationLevel) 事务的特性(ACID) 1、原子性(Atomicity)   事物是数据库的逻辑工作单位,事务中的诸多操作要么全做要么全不做 2、一致性(Consistency)   事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态 3、隔离性(Isolation)   一个数据的执行不能被其他事务干扰 4、持续性/永久性(Durability)   一个事务一旦提交,它对数据库中的数据改变是永久性的 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好,这点很好理解 事务的隔离级别(IsolationLevel) 1 // 摘要: 2 // Specifies the transaction locking behavior for the connection. 3 public enum IsolationLevel 4 { 5 // 摘要: 6 // A different isolation level than the one specified is being used, but the 7 // level cannot be determined. 8 Unspecified =