您的位置:首页 > 其它

【hibernate框架】事务并发处理

2015-03-10 15:33 288 查看
事务并发处理:

a)事务:ACID(事务的四个特性)

   i.Atomic(原子性)、Consistency(一致性)、Itegrity(独立性)、Durability(持久性)

A:要么全部执行,要么不执行。

C:事务的运行不该变数据库中数据的一致性。

I:两个以上的事务不会出现交错执行的状态。

D:事务运行以后,系统的更新是永久的,不会无缘无故的回滚。

b)事务并发时可能出现的问题(参考孙卫琴的表)

1.第一类丢失更新(Lost Update)



2.脏读(duty read)



3.不可重复读(non-repeatable read)



4.第二类丢失更新(second lost update problem)



5.幻读(phantom read)重点说的是插入删除的操作



数据库的隔离机制:

不让它并发,在一定的时候处理它并发的问题,隔离它们,不让它们相互影响。

有四种隔离机制:(1.2.4.8)

1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)

2.read-committed:不会出现脏读,因为只有另一个事务提交才会读取来

结果,但仍然会出现不可重复读和幻读现象。

4.repeatable read:MySQL默认。可重复读,读数据读出来之后给它加把锁,

其他人先别更新,等我用完了你再更新。你的事务没完,其他事务就不可能改这条记录。

8.serializable:序列化,最高级别。一个一个来,不去并发。效率最低。

每一种数据库支持的隔离机制不一样(但大致少不了这四种)

设立级别的时候,一般会设立为2,避免脏读,并发性好。

查询数据库隔离机制的语句:select @@tx_isolation

对于hibernate,要想处理多个事务之间的并发,也得去设定事务的隔离级别。

也是上面4种。

设定hibernate的事务隔离级别

1.hibernate.connection.isolation=2(值是1,2,4,8)
2.用悲观锁、乐观锁

在我的另外一篇学习总结中有关于悲观锁和乐观锁在hibernate中的应用:http://blog.csdn.net/acmman/article/details/44176281

转载请注明出处:http://blog.csdn.net/acmman/article/details/44176065
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: