声明式事务和编程式事务的相关知识

编程式事务要在代码中写明事务的Commit和rollback的内容,在开始时开启事务,在结束时关闭事务,入侵性强,但是粒度性细。
声明式事务只需要在配置类中定义事务的关注点和切入点,然后开启事务,系统会自动在需要的地方自动提交或者自动回滚,可以在需要的地方添加注解进行相应的事务操作。

事务的隔离级别可以分为五种:
默认值的级别其实相当于读已提交
读已提交是指在一个事务可以读取另外一个事务已经提交的数据,这种情况下可以避免脏读,大多数情况下使用。
读未提交是指一个事务能读取另外一个事务修改但是未提交的数据,这种情况下不能避免脏读和不可重复,基本上不使用。
可重复读是指一个事务可以多次执行某个查询语句,这样子即使数据发生改变了,也不会出现脏读和不可重复读
还有最后一种就是直接按顺序执行事务,这样不存在干扰,也就可以避免脏读和不可重复读了。

说到上面的隔离事务级别,自然要知道脏读、幻读(虚读)以及不可重复读这三个名词的概念了
脏读是指一个事务在修改数据但还没提交到数据库的时候,另外一个事务在读取数据,但是因为修改数据的事务发生了某些异常情况,导致发生了回滚,这个时候读取数据的事务读取到的数据其实不是最终数据,这种就是虚读。
不可重复读是指事务A在修改数据同时事务B在读取数据,事务B读到的其实是还未修改前的数据,当多次读取该数据是,发现没办法读到一开始的那个数据,这种情况就是不可重复读。
幻读是指事务A对数据库中某一列属性的值进行修改,事务B插进了一条新的数据,当事务A重新读取整张表的时候,发现还有某行的那一列数据没有修改,就好像出现幻觉一样,这种情况就是幻读

事务的传播行为,也就是事务协调者对于事务管理者所携带的事务的处理态度
默认的传播行为是有事务就加入事务,没有事务就创建事务。
第二种是有事务就加入事务,没有事务就创建事务,但是和上面有区别的是,当存在多个事务时,然后需要的加入的开始事务又不一样的时候,这个时候就可以在业务层执行这个事务传播行为,会使得即使加入事务的内容没有成功执行,另外一个加入事务的行为不受干扰。这个可以想一下银行转账和日志记录的例子。
第三种是如果事务存在的话,那么就加入事务,如果事务不存在,也就是非事务的话,那么就不加入事务,继续执行该非事务。
第四种是如果事务存在的话就加入该事务,如果事务不存在的话,就将事务挂起。
第五种是如果存在事务就将事物挂起,如果不存在事务,是非事务的话就继续执行非事务。
第六种就是比较少用的,可以指定执行到哪个地方就进行回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值