一、定义

事务就是逻辑上的一组操作,为了保证一组数据库操作,要么全部成功,要么全部失败。

 

二、ACID特性

1、原子性(Atomicity):一个事务中的多组操作,要么全部成功,要么全部失败。在事务提交(commit)成功之后,所有的操作都生效,提交失败,所有的操作都会回滚。

2、 一致性(Consistency):一个事务执行之前和执行之后数据库都必须处于一致性状态。在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。

3、隔离性(Isolation):事务在执行过程中,是与外界完全隔离的,即使数据库发生了变更,事务中也获取不到。A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。

4、持久性(Durability):事务一旦提交,对数据库的变更就会持久化到磁盘,即使数据库发生异常重启,数据也不会丢失。

 

三、隔离级别

  当数据库出现有多个事务同时执行时,就可能出现 脏读 幻读不可重复读等问题,隔离级别就是为了解决这些问题的。隔离的越严实,效率就越低,并发越低,安全性越高。

  

  隔离级别分为以下 4 种:

读未提交(read uncommitted,RU): 一个事务还未提交时,它做的变更就可以被别的事务看到。

读提交(read committed,RC):事务提交以后,它做的变更才能被其它事务看到。但是在这个事务未提交之前,数据库中发生的变更,这个事务也能看见。

可重复度(repeatable read,RR): 事务总是只能看见在启动的那个时刻,数据库的状态。事务未提交之前做的变更,其它事务看不见。事务执行期间,数据库中已经发生的变更,这个事务也看不见。只能看见事务刚启动时刻,数据库的状态。

串行化(serializable): 事务对某一行的操作会加锁,“写”会加“写锁”,“读”会加“读锁”,在锁释放掉之前,其它的事务都无法都这一行的记录进行操作。必须等之前的事务执行完毕,释放锁。后面的事务又会重新加锁。

  假设有以下两个事务,其中执行的操作如图,从上至下是时间先后顺序:

      

 

 

四、事务启动

(1)获取连接 Connection con = DriverManager.getConnection();

(2)开启事务con.setAutoCommit(true/false);

(3)执行CRUD:增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。

(4)提交事务/回滚事务 con.commit() / con.rollback();

(5)关闭连接 conn.close()。

  使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 
自动完成。

三、回滚 

  

 

posted on 2020-05-29 17:34  小潘同学  阅读(98)  评论(0编辑  收藏  举报
-->