1222并发异常 并发访问带来数据不一致性主要包括四类:丢失 更新、不可重复读、脏读和幻读 1.丢失更新( Lost Update) 丢失更新是指当两个或两个以上的事物同时读取 同一数据并进行修改,其中一个事物提交的修 改结果破坏了另一个事物的提交的修改结果。 丢失更新有两类,分别介绍如下: (1)第一类丢失更新:一个事务在撤销时,把 其它事务提交的更新数据覆盖,如表12-1所示
12.2.2 并发异常 并发访问带来数据不一致性主要包括四类:丢失 更新、不可重复读、脏读和幻读。 1.丢失更新(Lost Update) 丢失更新是指当两个或两个以上的事物同时读取 同一数据并进行修改,其中一个事物提交的修 改结果破坏了另一个事物的提交的修改结果。 丢失更新有两类,分别介绍如下: (1)第一类丢失更新:一个事务在撤销时,把 其它事务提交的更新数据覆盖,如表12-1所示
1222并发异常—-第一类丢失更新 时间取款事务a 转账事务b 开始事务 开始事务 3查询账户余额为1000元 t4 查询账户余额为1000元 汇入100元把余额改为1100元 提交事务 t7取出100元把余额改为900元 8撤销事务 t9余额恢复为1000元(丢失更新)
12.2.2 并发异常----第一类丢失更新 时间 取款事务a 转账事务b t1 开始事务 t2 开始事务 t3 查询账户余额为1000元 t4 查询账户余额为1000元 t5 汇入100元把余额改为1100元 t6 提交事务 t7 取出100元把余额改为900元 t8 撤销事务 t9 余额恢复为1000元(丢失更新)
122并发异常第二类丢失更新 (2)第二类丢失更新:一个事务在提交时,把其它事务提交的更新数 据覆盖,如表122所示。 表12-2第二类丢失更新 时间转账事务a 取款事务b 开始事务 t2开始事务 t3 查询账户余额为1000元 t4查询账户余额为1000元 t5 取出100元把余额改为900元 t6 提交事务 汇入100元 t8提交事务 t9把余额改为1100元(丢失更新)
12.2.2 并发异常----第二类丢失更新 (2)第二类丢失更新:一个事务在提交时,把其它事务提交的更新数 据覆盖,如表12-2所示。 时间 转账事务a 取款事务b t1 开始事务 t2 开始事务 t3 查询账户余额为1000元 t4 查询账户余额为1000元 t5 取出100元把余额改为900元 t6 提交事务 t7 汇入100元 t8 提交事务 t9 把余额改为1100元(丢失更新) 表12-2 第二类丢失更新
1222并发异常-2.脏读( Dirty Read) 2.脏读( Dirty Read 脏读就是指一个事务读到另一事务尚未提交的更新数据(不正确的临时数 据),如表12-3所示。 表123脏读 时间转账事务a 取款事务b 开始事务 2开始事务 查询账户余额为1000元 t 4 取出500元把余额改为500元 t5查询账户余额为500元 撤销事务余额恢复为1000元 t7汇入100元把余额改为600元 t8提交事务
12.2.2 并发异常----2.脏读(Dirty Read) 2.脏读(Dirty Read) 脏读就是指一个事务读到另一事务尚未提交的更新数据(不正确的临时数 据),如表12-3所示。 时间 转账事务a 取款事务b t1 开始事务 t2 开始事务 t3 查询账户余额为1000元 t4 取出500元把余额改为500元 t5 查询账户余额为500元 t6 撤销事务余额恢复为1000元 t7 汇入100元把余额改为600元 t8 提交事务 表12-3 脏读
1222并发异常—不可重复读 3.不可重复读( Non Repeatable Read) 不可重复读是指一个事务中在两次读取同一数据行的过程中,由于另 个事务的修改,导致了第一个事物两次查询结果 样,如表124 所示 表124不可重复读 时取款事务a 转账事务b t1 开始事务 t2开始事务 t 查询账户余额为1000元 t4查询账户余额为1000元 t5 取出100元把余额改为900元 提交事务 t7查询账户余额为900元(和t4读取的不一致)
12.2.2 并发异常----不可重复读 3.不可重复读(NonRepeatable Read) 不可重复读是指一个事务中在两次读取同一数据行的过程中,由于另一 个事务的修改,导致了第一个事物两次查询结果不一样,如表12-4 所示。 时 间 取款事务a 转账事务b t1 开始事务 t2 开始事务 t3 查询账户余额为1000元 t4 查询账户余额为1000元 t5 取出100元把余额改为900元 t6 提交事务 t7 查询账户余额为900元(和t4读取的不一致) 表12-4 不可重复读