spring事务传播原理及数据库事务操作原理

JDBC API

DriverManager

1.解耦的涉及,抽象工厂模式
2.下面创建连接的getConnection

在这里插入图片描述

Connection

1.根数据库建立链接的一个封装,说到底他是Socket TCP

在这里插入图片描述

statement

1.语句集,SQL解析器,解析SQL语法(协议 语言 语法)

在这里插入图片描述

ResultSet

1.通过执行SQL获得一个结果的封装,在java中的体现方式(Map+Cursor游标)

在这里插入图片描述

事务

事务概念

1.事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)2.事务是恢复和并发控制的基本单位;

事务特点

1.原子性
2.一致性
3.隔离性
4.持久性

原子性[Automicity]

1.要么都做,要么都不做,也就说,对数据库的操作,要么全部都成功,要么全部失败[回滚--->失败],保持数据库的数据是永久的;

一致性[Consistency]

1.这里的一致性主要是指一次事务操作完成,数据库中具有有关联关系的数据保持一致;
2.典型的案例-银行转账:从A账户转账到B账户500,A账户要保持减少500,同时B账户增加500;

隔离性[Isolation]

1.隔离性这里主要是不同的事务之间执行是互不影响的;
2.事务的内部操作以及事务执行过程中使用的数据对并发的其他的事务是隔离的,不受影响的,互不干扰;

持久性[Durability]

1.持久性也称之为永久性;事务一旦提交,它对数据库中数据的改变是永久性;

Spring事务传播属性[PROPAGATION]

在这里插入图片描述

REQUIRED

1.支持当前正在执行的事务,如果当前没有事务,就新建一个事务;
  说的通俗点:如果当前有事务,那么其他的数据库操作,也用这个事务,没有则重新建立一个;
2.spring默认的事务的传播

REQUIRES_NEW

1.新建事务,如果当前存在事务,把当前事务挂起;
2.新建的事务将和被挂起的事务没有任何关系,是两个独立的事务
3.如果同一个service中有两个方法数据库访问的操作,
  第一个方法一个事务,第二个方法会新建一个事务;
  一个方法处理失败回,另外不会影响到另外一个方法的事务处理

SUPPORTS

1.当前有事务就按照事务处理,如果没有事务,就啥也不干;

MANDATORY

1.支持当前事务,如果当前没有事务,就抛出异常

NOT_SUPPORTED

1.以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

NEVER

1.以非事务方式执行,如果当前存在事务,则抛出异常。

NESTED

1.如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。
2.它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。
3.内部事务的回滚不会对外部事务造成影响。
4.它只对DataSourceTransactionManager事务管理器起效;

Spring事务的隔离级别[ISOLATION]

在这里插入图片描述

在这里插入图片描述

DEFAULT

1.默认的数据库隔离级别

READ_UNCOMMITTED

1.这是事务最低的隔离级别;
2.它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

READ_COMMITTED

1.保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。

REPEATABLE_READ

SERIALIZABLE

1.这处是理花为费顺最序高执代行价。但是最可靠的事务隔离级别。事务被处理为顺利执行;

备注什么是脏读、幻读、不可重复读

脏读

一事务对数据进行了增删改,但未提交,另一事务可以读取到未提交的数据。
如果第一个事务这时候回滚了,那么第二个事务就读到了脏数据。

不可重复读

一个事务中发生了两次读操作,第一次读操作和第二次操作之间,
另外一个事务对数据进行了修改,这时候两次读取的数据是不一致的。

幻读

第一个事务对一定范围的数据进行批量修改,第二个事务在这个范围增加一条数据,
这时候第一个事务就会丢失对新增数据的修改。

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/89421000
今日推荐