表的初始数据如下:
事务1执行流程如下:
# 步骤1 开启事务
begin
# 步骤2 执行查询id =1
select * from test_user where id = 1 ;
# 步骤3 执行查询id =1
select * from test_user where id = 1 ;
# 步骤4 将库里面age = 5 的数据更新成age = 4
update test_user set age = 4 where age = 5 ;
# 步骤5 执行查询 id =1
select * from test_user where id = 1 ;
# 步骤6 提交事务
commit
事务2 执行流程如下:
# 步骤1 开启事务
begin
# 步骤2 将id =1 的数据年龄更新成5
update test_user set age = 5 where id = 1;
# 步骤3 提交事务
COMMIT
下面示例用法规则如下:
- 用T 表示事务1 、 M 为事务2
- 用数字表示操作的步骤 。例如 T1 -> T2 表示操作 事务1 的步骤1 和步骤2
- 两个事务穿插执行流程示例 :例如 T1 -> T2 -> M1 即为开启事务1 ,事务1查询 id =1 的数据, 然后开启事务2.
操作流程如下:
T1 -> T2 -> M1 -> M2 -> M3 -> T3 -> T4 -> T5 -> T6
问题:
- 执行T3 查询 id =1 的记录年龄是多少?为什么?
id=1的年龄为1 此题考察的是MVCC机制
- 执行T4 更新几条数据?为什么?
更新两条数据
- 执行T5查询 id =1的记录年龄是多少?为什么?
id=1的年龄为4
考察的内容
- MVCC