Spring事务管理

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。

事务的4个特性?  

  ACID。

原子性(Atomic):事务是由一个或多个活动所组成的一个工作单元。原子确保事务中的所有操作全部发生或全部不发生。如果所有的活动都成功了,事务也就成功了。如果任意一个活动失败了,整个事务也失败并回滚。

一致性(Consistent):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态。现实的数据不应该被损坏。

隔离性(Isolated):事务允许多个用户对相同的数据进行操作,每个用户的操作不会与其他用户纠缠在一起。因此,事务应该被彼此隔离,避免发生同步读写相同数据的事情(注意的是,隔离性往往涉及到锁定数据库中的行或表)。

持久性(Durable):一旦事务完成,事务的结果应该持久化,这样就能从任何的系统崩溃中恢复过来。这一般会涉及将结果存储到数据库或其他形式的持久化存储中。

 

通俗的说事务,指一组操作,要么都成功执行,要么都不执行(原子性)

在所有的操作没有执行完毕之前,其它会话不能够看到中间改变的过程(隔离性)

事务发生前和发生后,数据的总额保持不变(一致性)

事务产生的影响不能被撤销(持久性)

 

事务中可能会出现的并发问题有哪些?

  脏读、不可重复读、幻读。

  解决并发问题的方法就是设置隔离级别。

 

事务中有几种隔离级别呢?

  4种。读未提交(uncommitted)、读已提交(committed)、可重复读(repeatable_read)、串行化(serializable)。

读未提交(uncommitted):允许读取尚未提交的数据变更。可能会导致脏读、幻读或不可重复读。

读已提交(committed):允许读取并发事务已经提交的数据。可以阻止脏读、但是幻读或不可重复读仍有可能发生。

可重复读(repeatable_read):可以阻止脏读和不可重复读,但可能会导致幻读。

串行化(serializable):完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读。这是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的。

posted @ 2021-09-23 15:05  最强Java代表  阅读(33)  评论(0)    收藏  举报