[color=red]1 数据库事务的ACID属性[/color]
原子性(atomic)
对于中包含的操作,要么全部执行,要么全部不执行。
一致性(consistent)
事务在完成时,必须使所有的数据都保持一致状态。
隔离性(insulation)
当多个事务并发执行的时候,不同事务之间数据的可见程度。
持久性(durability)
事务完成之后,更改的数据是永久的。
[color=red]2 事务的隔离性的级别包括:[/color]
Read_Uncommited
Read_Commited
Repeatable_Read
Serializeble
这四种不同的隔离级别可能导致的并发问题:
[img]http://dl2.iteye.com/upload/attachment/0119/3805/e2e6d8c2-66b6-3356-90be-18be6b92fb21.png[/img]
图片引用自博客:[url]http://blog.csdn.net/bluishglc/article/details/5626009[/url]
[img]http://dl2.iteye.com/upload/attachment/0119/3797/5d29a744-e2fd-3ede-a635-6e39eb9ef4b4.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0119/3799/2e1b7448-1fbc-3614-aee5-3a3f60ebabcb.png[/img]
脏读:一个事务读取了另一个事务改写但尚未提交的数据。
[img]http://dl2.iteye.com/upload/attachment/0119/3801/57f0b302-6d07-3f4d-ab34-5a00a07502f4.png[/img]
不可重复读:同一次事务中执行了相同的查询两次以上,但每次查询的结果不同。通常由于另一个事务在两次查询更新了数据。
[img]http://dl2.iteye.com/upload/attachment/0119/3803/3cf85e08-87dd-30fa-b273-5533b55100ca.png[/img]
幻影读:一个事务读取了几行数据,接着另一个并发事务插入了几行数据。随后的查询中,第一个事务会发现多了一些原本不存在的数据行。
幻读与不可重复读类似:前者是指两次读取中,另一个事务进行了插入操作,导致读取到原来不存在的值。后者是指两次读取中,另一个事务进行了更新,导致两次的数据信息不一致。
[color=red]3 事务的传播特性[/color]
事务的传播属性是在Spring框架中配置事务的时候需要理解的。Spring支持的事务传播属性有7种:包括:
Required:表示当前方法需要在事务环境中运行。如果当前已经有事务环境,就在当前事务环境中运行,如果当前没有事务环境,就新建一个事务环境并在其中运行。
Required_New:表示当前方法需要在新的事务环境中运行。如果当前已经有事务环境,则挂起。然后新建一个事务环境并在其中运行。
Mandatory:表示当前方法需要在事务环境中运行。如果当前不在事务环境中,就会抛出异常。
Supports:表示当前方法可以在事务环境中运行。如果当前在事务环境中,就以事务的方式运行。如果不在事务环境中,就以非事务方式运行。
Not_Supported:表示当前方法不可以在事务环境中运行。如果当前在事务环境中,则挂起。然后以非事务方式运行。
Never:表示当前方法不能以事务方式运行。如果当前在事务环境中,就会抛出异常。
Nested:表示当前方法以嵌套事务的方式运行。如果当前在事务环境中,即在父事务环境中创建一个子事务环境。如果当前不在事务环境中,就以Required方式运行。
原子性(atomic)
对于中包含的操作,要么全部执行,要么全部不执行。
一致性(consistent)
事务在完成时,必须使所有的数据都保持一致状态。
隔离性(insulation)
当多个事务并发执行的时候,不同事务之间数据的可见程度。
持久性(durability)
事务完成之后,更改的数据是永久的。
[color=red]2 事务的隔离性的级别包括:[/color]
Read_Uncommited
Read_Commited
Repeatable_Read
Serializeble
这四种不同的隔离级别可能导致的并发问题:
[img]http://dl2.iteye.com/upload/attachment/0119/3805/e2e6d8c2-66b6-3356-90be-18be6b92fb21.png[/img]
图片引用自博客:[url]http://blog.csdn.net/bluishglc/article/details/5626009[/url]
[img]http://dl2.iteye.com/upload/attachment/0119/3797/5d29a744-e2fd-3ede-a635-6e39eb9ef4b4.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0119/3799/2e1b7448-1fbc-3614-aee5-3a3f60ebabcb.png[/img]
脏读:一个事务读取了另一个事务改写但尚未提交的数据。
[img]http://dl2.iteye.com/upload/attachment/0119/3801/57f0b302-6d07-3f4d-ab34-5a00a07502f4.png[/img]
不可重复读:同一次事务中执行了相同的查询两次以上,但每次查询的结果不同。通常由于另一个事务在两次查询更新了数据。
[img]http://dl2.iteye.com/upload/attachment/0119/3803/3cf85e08-87dd-30fa-b273-5533b55100ca.png[/img]
幻影读:一个事务读取了几行数据,接着另一个并发事务插入了几行数据。随后的查询中,第一个事务会发现多了一些原本不存在的数据行。
幻读与不可重复读类似:前者是指两次读取中,另一个事务进行了插入操作,导致读取到原来不存在的值。后者是指两次读取中,另一个事务进行了更新,导致两次的数据信息不一致。
[color=red]3 事务的传播特性[/color]
事务的传播属性是在Spring框架中配置事务的时候需要理解的。Spring支持的事务传播属性有7种:包括:
Required:表示当前方法需要在事务环境中运行。如果当前已经有事务环境,就在当前事务环境中运行,如果当前没有事务环境,就新建一个事务环境并在其中运行。
Required_New:表示当前方法需要在新的事务环境中运行。如果当前已经有事务环境,则挂起。然后新建一个事务环境并在其中运行。
Mandatory:表示当前方法需要在事务环境中运行。如果当前不在事务环境中,就会抛出异常。
Supports:表示当前方法可以在事务环境中运行。如果当前在事务环境中,就以事务的方式运行。如果不在事务环境中,就以非事务方式运行。
Not_Supported:表示当前方法不可以在事务环境中运行。如果当前在事务环境中,则挂起。然后以非事务方式运行。
Never:表示当前方法不能以事务方式运行。如果当前在事务环境中,就会抛出异常。
Nested:表示当前方法以嵌套事务的方式运行。如果当前在事务环境中,即在父事务环境中创建一个子事务环境。如果当前不在事务环境中,就以Required方式运行。