1222并发异常-4.幻读 幻读是指一个事务在执行两次查询的过程中,由于另外一个事务插 入或删除了数据行,导致第一个事务的第二次査询中发现新增 或丢失数据行现象,如同幻觉一样,如表125所示。 表125幻读 时统计金额事务a 转账事务b 间 t1 开始事务 t2开始事务 t3统计总存款数为1000元 t4 新增一个存款账户,存款为100元 t5 提交事务 t6再次统计总存款数为1100元(幻象读)
12.2.2 并发异常----4.幻读 幻读是指一个事务在执行两次查询的过程中,由于另外一个事务插 入或删除了数据行,导致第一个事务的第二次查询中发现新增 或丢失数据行现象,如同幻觉一样,如表12-5所示。 时 间 统计金额事务a 转账事务b t1 开始事务 t2 开始事务 t3 统计总存款数为1000元 t4 新增一个存款账户,存款为100元 t5 提交事务 t6 再次统计总存款数为1100元(幻象读) 表12-5 幻读
1222并发异常 幻读和不可重复读的区别:幻读是指读到了其它 事务已经提交的新增数据,而不可重复读是指 读到了已经提交事务的更改数据;添加行级锁, 锁定所操作的数据,可防止读取到更改数据, 而添加表级锁,锁定整个表,则可以防止新增 数据
12.2.2 并发异常 幻读和不可重复读的区别:幻读是指读到了其它 事务已经提交的新增数据,而不可重复读是指 读到了已经提交事务的更改数据;添加行级锁, 锁定所操作的数据,可防止读取到更改数据, 而添加表级锁,锁定整个表,则可以防止新增 数据
1223并发调度 并发事物中各事物的执行顺序和执行时机一方面取决于事物自身内 部逻辑,另一方面也受到DBMS中事物调度机制的控制。并发访问 时,必须采取合适的调度机制来安排各个事务动作流的执行顺序 以保证事务的AC|D特性。 根据事务调度的方式,并发调度分为两种:串行调度和并行调度。 1.串行调度 若多个事务按完成顺序依次执行,则称为事物的串行调度
12.2.3 并发调度 并发事物中各事物的执行顺序和执行时机一方面取决于事物自身内 部逻辑,另一方面也受到DBMS中事物调度机制的控制。并发访问 时,必须采取合适的调度机制来安排各个事务动作流的执行顺序, 以保证事务的ACID特性。 根据事务调度的方式,并发调度分为两种:串行调度和并行调度。 1.串行调度 若多个事务按完成顺序依次执行,则称为事物的串行调度
1223并发调度 【例12-2】有甲、乙两个售票窗,各卖出某 车次的硬座车票2张,卧铺车票1张。设该车次 的初始硬座车票数为A=50,卧铺车票数为 B=30,read()表示读出数据, write()表 示写入数据。现将事务甲和事务乙串行执行 则有表126和表127所示的两种调度方法
12.2.3 并发调度 【例12-2】 有甲、乙两个售票窗,各卖出某一 车次的硬座车票2张,卧铺车票1张。设该车次 的初始硬座车票数为A=50,卧铺车票数为 B=30,read()表示读出数据,write()表 示写入数据。现将事务甲和事务乙串行执行, 则有表12-6和表12-7所示的两种调度方法
1223并发调度 时刻事务甲事务乙 时刻事务甲 事务乙 read(A)=50 read(A)=50 A=A-2 A=A-2 t2 write (A)=48 t2 write (A)=48 t3 read(B) =30 t3 read(B) =30 B-1 t4 B=B-1 write(B)=29 t5 write(B)=29 6 read(A)=48 read(A)=48 A=A-2 A=A-2 t8 write (A)=46 t8 write(A)=46 t9 read(B)=46 9 read(B)=29 t11 B=B-1 B=B-1 注意:串行调度的结果总是正确的,但执行效率低
12.2.3 并发调度 时刻 事务甲 事务乙 时刻 事务甲 事务乙 t0 read(A)=50 t0 read(A)=50 t1 A=A-2 t1 A=A-2 t2 write(A)=48 t2 write(A)=48 t3 read(B)=30 t3 read(B)=30 t4 B=B-1 t4 B=B-1 t5 write(B)=29 t5 write(B)=29 t6 read(A)=48 t6 read(A)=48 t7 A=A-2 t7 A=A-2 t8 write(A)=46 t8 write(A)=46 t9 read(B)=46 t9 read(B)=29 t11 B=B-1 t11 B=B-1 t12 write(B)=28 t12 write(B)=28 注意:串行调度的结果总是正确的,但执行效率低