事务隔离级别和传播

事务隔离级别和传播机制

mysql事务隔离级别

为什么会出现“脏读”?因为没有“select”操作没有规矩。

为什么会出现“不可重复读”?因为“update”操作没有规矩。

为什么会出现“幻读”?因为“insert”和“delete”操作没有规矩。

Oracle支持两种事务隔离级别:READ COMMITTED(默认事务隔离级别),SERIALIZABLE(序列化)

MySQL支持四种事务隔离级别REPEATABLE READ(默认事务隔离级别)

上面介绍的是Mysql的事务隔离级别,那跟spring中的事务隔离级别有什么必然的联系呢?

spring就是对数据库事务进行了封装而已,并提了5种事务隔离级别和7种事务传播机制

                                        5种事务隔离级别

ISOLATION_DEFAULT

spring将使用数据库中默认的事务隔离级别。

下面四种定义和上面一致。

ISOLATION_READ_UNCOMMITTED 

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

                                      7种事务传播机制

REQUIRED

如果当前方法有事务则加入事务,没有则创建一个事务。

NOT_SUPPORTED

不支持事务,如果当前有事务则挂起事务运行。

REQUIREDS_NEW

新建一个事务并在这个事务中运行,如果当前存在事务就把当前事务挂起。

新建事务的提交、回滚 与 挂起事务 没有联系,不会影响挂起事务的操作。

MANDATORY

强制当前方法使用事务运行,如果当前没有事务则抛出异常。

NEVER

当前方法不能存在事务,即非事务状态运行,如果存在事务则抛出异常。

SUPPORTS

支持当前事务,如果当前没事务,也支持非事务状态运行。

NESTED

如果当前存在事务,则在嵌套事务内执行。嵌套事务的提交、回滚 与 父事务没有任何关系,反之,当父事务提交嵌套事务也一起提交,父事务回滚也回滚嵌套事务。

如果当前没有事务,则,新建一个事务运行,这时候则与PROPAGATION_REQUIRED场景一致。

发布了91 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hjing123/article/details/103887147