事务(mysql&spring)

7 篇文章 0 订阅
6 篇文章 0 订阅

mysql事务

1.事务的ACID原则:

原子性(A):执行事务时,要么都成功,要么都不成功,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性(C):执行后,保持数据的一致性

隔离性(I):事务相互独立,互不影响

持久性(D):执行后事务永久的存储在数据库中(内存的数据持久到硬盘文件中)

https://blog.csdn.net/weixin_43817064/article/details/97791740

2.脏读,幻读,不可重读的区别:

转发:http://www.zsythink.net/archives/1233

脏读:事务A没有做任何数据变更,但由于事务B对数据进行了操作,但是还未提交,这时事务A查到了事务B还未提交的数据,这个就是脏读。(侧重点在于别的事务未提交)

幻读:事务A未做任何改变,但由于事务B对数据进行了操作,已经提交,这时事务A相比于第一次查询,莫名的多出了一些之前不存在数据,或者莫名的不见了一些数据

不可重读: 不可重读的侧重点在于更新修改数据。表示在同一事务中,查询相同的数据范围时,同一个数据资源莫名的改变了。 

3.隔离级别:

a.读未提交:比如事务A添加了一笔数据但是未提交,事务B这时是可以读到事务A未提交的数据的,这时B(未提交)读到的就相当与脏数据

b.读提交:比如事务A添加了一笔数据但未提交,事务B是读取不到事务A这笔数据的,如果事务A提交了,事务B(未提交)就可以读到

c.可重读:比如事务A添加了一笔数据也commit提交了,但事务B的查询语句还未提交,在未提交前是读不到事务A添加的那笔数据的,事务B的查询sql提交后就可以读到事务A添加的那笔数据了

d.串行化:当事务A在执行写时,事务B这时进行查询了,那这时事务B只能等待,在A事务写完commit提交后,事务B查询的数据就可以查出来了

4.不同隔离级别所拥有的问题:

注:只有innodb引擎支持事务,mysql中默认的隔离级别是 REPEATABLE-READ可重复读(https://www.cnblogs.com/who-else/p/6659564.html

 

spring事务:

https://www.cnblogs.com/zhaoyibing/p/9558960.html

https://blog.csdn.net/ken_guanjy/article/details/105722146  (注:这个对事务传播有形象的解析)

a.事务传播行为:

传播行为意义
PROPAGATION_REQUIRES表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。
PROPAGATION_SUPPORTS表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_MANDATORY表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常。
PROPAGATION_REQUIRES_NEW表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION_NOT_SUPPORTED表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_NEVER表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION_NESTED表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。


b.隔离级别:

隔离级别含义
ISOLATION_DEFAULT使用后端数据库默认的隔离级别。
ISOLATION_READ_UNCOMMITTED允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
ISOLATION_READ_COMMITTED允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。

ISOLATION_REPEATABLE_READ

对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。 

ISOLATION_SERIALIZABLE

完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。

c.只读

https://www.cnblogs.com/jtlgb/p/10435450.html

d.事务超时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值