hibernate-事务并发处理-21
2017-06-04 23:42
120 查看
事务acid
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)事务并发可能出问题
第一类丢失更新(不支持事务的数据库才会出现)第一个事务:取钱事务
第二个事务:存钱事务
第一个事务查余额1000
第二个事务查1000
第二个事务存100,余额变为1100,第二个事务提交
第一个事务取100,余额变为900
第一个事务撤销(断电等)
余额变为1000
(第二个事务的钱没存上)
脏读(读了别的事物没有提交的数据)
dirty read 重点看
第二个事务存100,余额变为1100
第一个事务查余额为1100(读取脏数据)
第二个事务回滚
第一个事务取款1100
第一个事务取款失败
不可重复读(同一个事务前后读出来的数据不一样)
nonrepeatable read 重点看
第一个事务查余额1000
第二个事务存100,余额变为1100,提交事务
第一个事务查余额1100
提交事务
第二类丢失更新(不可重复读的特殊情况)
幻读(它重点说的是插入和删除,另外一个事务插入或删除新数据)phantom problem 重点看
第一个事务: 查询学生事务
第二个事务:插入新学生事务
第一个事务查询学生为10人
第二个事务插入一个学生
第一个事务查询学生为11人
第二个事务提交
第一个事务提交(由于第二个事务的影响,前后多了一个人)
数据库的事务隔离机制
1.java.sql.Connection2.事务的4种隔离级别
a. read-uncommited(可以读没有提交的数据)
限制不了脏读、不可重复读、幻读
b. read-commited
不会出现脏读、但可能出现不可重复读、幻读
c.repeatable-read
给数据上加把锁,即不让其他的事务改这个数据
d.serialzable
即拒绝并发,但效率最低
一般情况下数据库会设置read-commited,因为综合的性能比较好,然后代码尝试解决不可重复读、幻读的问题
事务级别越高, 效率越低
mysql支持4种:默认的是repeatable-read重点看
oracle支持2种:默认是read-commited
3.hibernate中也是有4种事务隔离级别
可通过参数设定
1、2、4、8 如果不设置,依赖数据库的默认
相关文章推荐
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理
- HIbernate学习笔记(九) hibernate事务并发处理与乐观悲观锁
- Hibernate事务与并发问题处理
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务,及其并发处理
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)【转】
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)及事务隔离级别
- Hibernate事务与并发问题处理(乐观锁与悲观锁)
- Hibernate事务与并发问题处理(乐观锁与悲观锁)