随笔-95  评论-31  文章-10  trackbacks-0
事物ACID特性

A:atomicity 原子性
C:consistency 一致性
I:isolation 隔离性 多个事物可以独立运行,而不会彼此产生影响。也即可并发执行
D:durability 持久性

并发事物:T1新增一条记录,但是没有commit,此时T2事物开始查询,但结果并不包含T1新增记录,只有T1执行commit,此时T2事物再次查询才能看到T1新增记录

事物锁:T1事物修改一行记录,但是没有commit,此时T1对该行“加锁”了,T2事物若试图update该条记录,必须等待T1提交commit释放锁后才能执行。

结论:读程序不会阻塞读程序、写程序不会阻塞读程序、只有在试图对相同的行进行修改时,写程序才会阻塞写程序。

联想代码中的service层、每个方法spring默认开启事物,可以并发执行,只有两个service方法中的dao方法同时修改一行记录时候,这两个方法就会阻塞等待其中一方释放事物锁,如果一方执行很慢,另外一方就会阻塞等待。


事物隔离级别:
1、幻象读取:T1读取结果集,T2新增一条记录满足T1读取的结果集,T1再次读取结果集,此时看到了T2新增的一条记录,这个新行就叫“幻象”
2、不可重复读:T1读取一行记录,T2修改了该条记录,T1再次读取这行记录,发现结果不同了,这个现象就叫“不可重复读”
3、脏读:T1更新一行记录,但是没有提交修改,此时T2读取该行记录,然后T1执行回滚操作,取消刚才的修改,现在T2读取的行就无效了称之为“脏数据”也即脏读。

SQL标准定义以下几种事物隔离级别
1、READ UNCOMMITTED 幻象读、不可重复读、脏读都允许
2、READ COMMITTED 允许幻象读、不可重复读、但不允许脏读
3、REPEATABLE READ 允许幻象读、但是不允许不可重复读和脏读
4、SERIALIZABLE 幻影读、不可重复读和脏读都不允许

oracle默认READ COMMITTED


posted on 2014-07-17 14:06 朔望魔刃 阅读(337) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: