Java常见面试题之事务 | 您所在的位置:网站首页 › 面试常见的问题有哪些 › Java常见面试题之事务 |
ACID特性
A:原子性,Atomictiy,事务是最小的执行单位,不允许分割,事务的原子性确保动作要么全部完成,要么完全不起作用.C:一致性 Consistency,执行事务前后,数据保持一致.I:隔离性Isolation 并发访问数据库时,一个用户的事务不背其他事务所干扰,个并发事务之间数据库相互独立.D:持久性 Durability 一个事务被提交之后,它对数据库中数据的改变是持久的,及时数据库发生故障也不应该对其有任何影响.
并发事务可能带来哪些问题
更新丢失: 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题,最后的更新覆盖了由其他事务所做的更新. 脏读:当一个事务正在访问数据并且对数据进行了修改,而这种修改还没提交到数据库中,这是另一个事务也访问了这个数据,然后使用了这个数据.因为这个数据是没有提交的,那么读到的这个数据就是'脏数据' 不可重复读:一个事务多次读同一个数据,在这个事务还没结束的时候,另一个事务也访问该数据.那么第一事务的两次读取数据之间,由于第二个事务的修改导致一个事务内两次读到的数据是不太一样的情况,因此称为不可重复读. 幻读:幻读与不可重复读类似,它发生在一个事务(T1)读取了将数据,接着另一个并发事务(T2)插入了一些数据时.在随后的查询中,第一个实物(T1)就会发现多了一些原本不存在的记录.就好像发生了幻卷一样,所以称为幻读. 不可重复读和幻读的区别,不可重复读的重点是修改,比如多次读取一条记录发现其中某列的值被修改. 幻读的重点在于新增和删除,比如多次读取一条记录,发现记录增多或减少了. 事务隔离级别READ-UNCOMMITED 读未提交: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读、不可重复读。 READ-COMMITED 读已提交:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读和不可重复读礽有可能发生. REPEATABLE-READ 可重复读: 对同一字段的多次读取结果都是一致的.除非数据是被本身事务自己修改,可以防止脏读和不可重复读.但是幻读仍有可能发生. SERIALIZABLE 可串行化: 最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次执行,这样事务之间就不可能存在干扰,也就是该级别可以防止脏读、幻读、不可重复读. MySQL默认的隔离级别是REPEATABLE-READ Spring Boot 设置事务隔离级别Spring Boot的自动装配,已经为我们引入了事务,所以我们之际使用注解@Transcational操作事务即可. Spring Boot设置事务隔离级别可以通过注解@Transcational(isolation=Isoliation.事务等级),如: @Transcational(isolation=Isolation.REPEATABLE_READ) Spring使用事务 使用注解的方式实现事务管理使用注解方式实现事务管理,需要我们在配置文件中线配置事务管理器. 在service类或者service类中的方法上添加事务的注解@Transactional,注解 参数如下: 属性名默认值含义name方法名,可以使用通配符,遵循ant风格:必填propagationREQUIRED事务传播行为;可取值包括REQURIED | SUPPORTS | MANDATORY | REQUIRES_NEW | NOT_SUPPORTED | NEVER | NESTED isolationDEFAULT事务隔离级别;可取值包括DEFAULT | READ_UNCOMMITED | READ_COMMITED | REPEATABLE_TEAD | SERIALIZABLEtimeout-1事务超时时间,单位:秒read-onlyfalse是否为只读事务rollback-for异常类,遇到该异常会回滚事务,默认RuntimeException或Error异常no-rollback-for异常类,遇到该异常时不需要回滚 完全注解方式配置事务将xml配置文件改为使用configuration注解的配置类配置.其他不变. xml配置文件实现事务管理 配置事务管理器配置通知配置切入点和切面 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |