您的位置:首页 > 其它

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.Connection

2.事务的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