事务传播机制 事务隔离级别
2017-03-18 14:18
162 查看
一:事务传播机制一共7种,可分为两类。
![](https://img-blog.csdn.net/20170318140732255?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHh4NjY3OTIzOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.需要事务
1.1-EREQUIRED(默认值):如果没有事务,就打开一个事务。如果事务已经打开,则共用这个事务
1.2-MANDATORY:如果没有事务,不会打开新的事务,会报异常。如果事务已经打开,则共用这个事务
1.3-REQUIRES_NEW:如果没有事务,就打开一个事务。如果事务已经打开,则将正在运行的事务挂起,该事务先执行(优先级高于已经打开的事务)。
1.4-NESTED:涉及嵌套事务。如下图,如果事务B中propagation=EREQUIRED/MANDATORY,则共用事务;如果propagation=REQUIRES_NEW,则事务B先执行。嵌套事务慎用,和数据库事务处理机制有关。
![](https://img-blog.csdn.net/20170318134916496?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHh4NjY3OTIzOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.不需要事务
2.1- SUPPORTS’没有事务,不会打开事务,照常执行。有事务打开,就跟事务一起,照常执行。
2.2-NEVER:不要事务,有事务打开就报错。
2.3-NOT_SUPPORTED:不需要事务,但是如果有事务打开,则将该事务挂机,先执行自己(优先级高)。
二:事务隔离级别:下面是5中事务隔离级别
![](https://img-blog.csdn.net/20170318140848879?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHh4NjY3OTIzOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1—DEFAULT(默认值):每个数据库的默认值不一样oracle/sqlsever:READ_COMMITTED;mysql:REPEATABLE_READ。
2—READ_UNCOMMITTED:未提交读。查询速度快,可能会有脏数据。使用于数据完整性不是很严格的场合。
3—READ_COMMITTED:提交读。隔离级别最低要求,可避免脏读的发生。可能出现不可重复读,幻读。
4—REPEATABLE_READ:可重复读。可避免脏读、不可重复读的发生,可能出现幻读。
5.SERIALIZABLE:串行读。安全,速度慢。可避免脏读、不可重复读、幻读的发生。
脏读:是指在一个事务处理过程里读取了另一个未提交的事务中的数据
不可重复读:是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
幻读:和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
1.需要事务
1.1-EREQUIRED(默认值):如果没有事务,就打开一个事务。如果事务已经打开,则共用这个事务
1.2-MANDATORY:如果没有事务,不会打开新的事务,会报异常。如果事务已经打开,则共用这个事务
1.3-REQUIRES_NEW:如果没有事务,就打开一个事务。如果事务已经打开,则将正在运行的事务挂起,该事务先执行(优先级高于已经打开的事务)。
1.4-NESTED:涉及嵌套事务。如下图,如果事务B中propagation=EREQUIRED/MANDATORY,则共用事务;如果propagation=REQUIRES_NEW,则事务B先执行。嵌套事务慎用,和数据库事务处理机制有关。
2.不需要事务
2.1- SUPPORTS’没有事务,不会打开事务,照常执行。有事务打开,就跟事务一起,照常执行。
2.2-NEVER:不要事务,有事务打开就报错。
2.3-NOT_SUPPORTED:不需要事务,但是如果有事务打开,则将该事务挂机,先执行自己(优先级高)。
二:事务隔离级别:下面是5中事务隔离级别
1—DEFAULT(默认值):每个数据库的默认值不一样oracle/sqlsever:READ_COMMITTED;mysql:REPEATABLE_READ。
2—READ_UNCOMMITTED:未提交读。查询速度快,可能会有脏数据。使用于数据完整性不是很严格的场合。
3—READ_COMMITTED:提交读。隔离级别最低要求,可避免脏读的发生。可能出现不可重复读,幻读。
4—REPEATABLE_READ:可重复读。可避免脏读、不可重复读的发生,可能出现幻读。
5.SERIALIZABLE:串行读。安全,速度慢。可避免脏读、不可重复读、幻读的发生。
脏读:是指在一个事务处理过程里读取了另一个未提交的事务中的数据
不可重复读:是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
幻读:和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
相关文章推荐
- Spring五个事务隔离级别和七个事务传播行为
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
- Spring 事务传播机制 实例讲解
- 事务隔离级别及传播行为以及事务注解@Transactional的理解
- spring事务隔离和传播机制的简单理解
- 理解mysql数据库的事务特征,事务隔离级别,加锁机制
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- 理解spring事务传播机制
- 实例详解Spring的事务传播机制(三)
- spring 事务传播行为和事务隔离级别
- Spring事务传播机制&隔离级别
- Spring事务传播机制解惑(转)
- Spring(十三)JDBC相关概念、事务隔离级别、事务传播属性、事务管理及Spring整合JDBC
- spring事务的传播机制及隔离级别
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- spring事务传播机制实例讲解
- 数据库的事务隔离级别和事务传播行为.md
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- 数据事务四种隔离机制和七种传播行为
- spring事务传播机制