幻读演示步骤2
开启窗口 1 的事务,插入用户编号为 3 的数据,然后成功提交事务,执行 SQL 如下:
start transaction; insert into userinfo(id,name,balance) values(3,'Spring',100); commit;
以上 SQL 执行结果如下图所示:
幻读演示步骤3
在窗口 2 中插入用户编号为 3 的数据,执行 SQL 如下:
insert into userinfo(id,name,balance) values(3,'Spring',100);
以上 SQL 执行结果如下图所示:
添加用户数据失败,提示表中已经存在了编号为 3 的数据,且此字段为主键,不能添加多个。
幻读演示步骤4
在窗口 2 中,重新执行查询:
select * from userinfo where id=3;
以上 SQL 执行结果如下图所示:
/ 在此事务中查询明明没有编号为 3 的用户,但插入的时候却却提示已经存在了,这就是幻读。
不可重复读和幻读的区别
二者描述的则重点不同,不可重复读描述的侧重点是修改操作,而幻读描述的侧重点是添加和删除操作。