spring的7个事务传播属性,mysql隔离级别

spring的7个事务传播属性
1.never 从不使用事务,若上层有事务,则抛出异常
2.not_supported 声明方法不开启事务,若上层有事务则挂起,当前方法执行完毕后,再恢复上层事务
3.mandatory 声明方法只能在有事务的环境下运行,本身不创建事务,若上层没有事务,则抛出异常
4.required(默认方法) 上层有事务则使用,上层没有事务,则创建一个新的事务
5.requires_new 不管上层有没有事务,都创建一个新的事务,并挂起上层事务,新事物执行完毕后,再恢复上层事务
6.sopports 上层有事务则使用,若没有,则在非事务环境下运行
7.nested 上层有事务,则在内部开启一个新的事务,新事物有自己独立的回滚点,新事物的回滚点不会对上层事务产生影响,但是上层事务的提交,会直接提交内层嵌套的事务;上层没有事务,则创建一个新的事务。该属性只会对DataSourceTransactionManager事务管理器有效

事务的ACID属性
1)原子性(Atomicity)
指事务是一个不可分割的工作单位,事务中的操作要么全部发生,要么全部不发生
2)一致性(Consistency)
事务必须是数据库从一个一致性状态变换到另一个一致性状态(比如银行卡转账)
3)隔离性(Isolation)
一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
4)持久性(Durability)
一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

数据库3种事务并发问题
1)脏读
读取到其他事务未提交的数据

	例如:
	1.事务1 将某条记录的AGE值从20修改为30
	2.事务2 读取了事务1更新后的值:30
	3.事务1 回滚,AGE的值恢复到了20
	4.事务2 读取到的30就是一个无效的脏数据

2)不可重复读
读取到其他事务已提交的数据

	例如:
	1.事务1 读取了AGE值为20 
	2.事务2 将AGE值修改为30
	3.事务1 再次读取AGE值为30,和第一次读取的不一致

3)幻读
读取到其他事务新插入的多条数据

	例如:
	1.事务1 读取了STUDENT表中的一部分数据
	2.事务2 向STUDENT表中插入了新的行
	3.事务1 再次读取STUDENT表时,多出了一些新的行

mysql 隔离级别
1)read uncommitted (读未提交)此时会出现脏读
脏读:读取到其他事务未提交的数据
2)read committed(读已提交)此时会出现不可重复读(Oracle默认事务隔离级别),平时开发大部分使用此种级别
3)repeatable read(可重复读)此时会出现幻读(mysql 默认事务隔离级别)
幻读:在同一个事务内,读取不到其他事务已提交的数据,但是当前事务提交之后,在执行相同的查询语句,会发现跟事务没提交之前的结果不一致
4)serializable 串行化
给每一行数据加锁(即给表加锁),会导致大量的超时现象和锁竞争

注:事务隔离级别不是越高越好,级别越高效率越低,根据具体情况选择合适的事务隔离级别
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值