事务隔离机制(hibernate 应用)

来源:互联网 发布:淘宝店铺退款多了封号 编辑:程序博客网 时间:2024/04/30 10:00

1.事务的特性:

acidatomic原子性不用多说 consistent一致性就是系统的数据不会遭到破坏 isolated隔离性防止同时读取同一条记录 durable持久性保存在db或其它形式的持久设备中

隔离级别的几个重要概念

  
脏读:事务 A 事务B   A对一条记录修改但未提交,B此时读取此条记录,之后Acommit失败

  
不可重复读:事务 A 事务B  A里面执行两次或以上的查询,查询的结果不对,在中间B对此记录改变了

  
幻读:当读取几条记录后,另外一个事务插入了一条记录,此后的查询会出现原来没有的额外记录

为防止以上的情况,可以采用不同的隔离级别

  2.事务并发时可能出现的问题:

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

时间

事务A

事务B

T1

开始事务

 

T2

 

开始事务

T3

查询账户余额1000

 

T4

 

查询账户余额1000

T5

 

汇入100元把余额更新1100

T6

 

提交事务

T7

取出100把余额改成900

 

T8

撤销更新

 

T9

余额为1000(丢失更新)

 

 

 

 

2.脏读(dirty read读了一个没有提交的事务的数据

 

时间

事务A

事务B

T1

开始事务

 

T2

 

开始事务

T3

 

查询账户余额1000

T4

 

汇入100元把余额更新1100

T5

查询账户余额1000(脏读)

 

T6

 

回滚

T7

取款1100

 

T8

提交事务失败

 

3.不可重复读(non-repeatable read),同一个事务前后数据不一致,被其它事务所影响

时间

事务A

事务B

T1

开始事务

 

T2

 

开始事务

T3

查询账户余额1000

 

T4

 

汇入100元把余额更新1100

T5

 

提交事务

T6

查询账户余额1100

 

T7

取款1100

 

T8

提交事务

 

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

时间

转账事务A

取款事务B

T1

 

开始事务

T2

开始事务

 

T3

 

查询账户余额1000

T4

查询账户余额1000

 

T5

 

取出100元把余额更新900

T6

 

提交事务

T7

存入100

 

T8

提交事务

 

T9

把余额为1100(丢失更新)

 

 

5.幻读(phantom read),插入和更新

时间

查询事务A

插入事务B

T1

开始事务

 

T2

 

开始事务

T3

查询学生人数为10

 

T4

 

插入一个新学生

T5

 

 

T6

查询学生人数为11

提交事务

T7

 

 

T8

提交事务