【发布时间】:2017-08-08 03:31:18
【问题描述】:
我的表的定义是
创建表
auto_inc(
idint(11) NOT NULL AUTO_INCREMENT,主键 (
id)) ENGINE=InnoDB 默认字符集=latin1
一开始有四行:
|身份证|
| 1 |
| 2 |
| 3 |
| 4 |
我打开了会话 1 并执行了
#session 1
set transaction isolation level REPEATABLE READ
start transaction;
select * from auto_inc
返回四行1,2,3,4。然后我打开另一个会话2并执行
#session 2
insert into auto_inc(`id`) values(null)
并插入成功。返回我执行的会话 1
#session 1
select * from auto_inc;#command 1
select * from auto_inc for update;#command 2
命令 1 返回四行 1,2,3,4。但是命令 2 返回 1,2,3,4,5。谁能给我一些线索,为什么命令 2 会看到会话 2 的插入? 提前致谢!
【问题讨论】:
-
因为“撤消区域”不允许共享锁定。因此,命令 2 检索新数据,忽略导致“幻读”的快照。
标签: mysql isolation-level