事务(mysql&spring)

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.事务超时

猜你喜欢

转载自blog.csdn.net/yanhhuan/article/details/111193685