问题:
1.为什么session_1执行mysql> select * from emp where empid = 102 for update;后,出现的间隙锁只是102本身还是还有其他?
2.为什么session_2执行mysql>insert into emp(empid,...) values(201,...); 会出现加锁?
...全文
83221打赏收藏
关于间隙锁
所使用到的表: 该表中插入1,2,3,....,101 执行如下操作: 问题: 1.为什么session_1执行mysql> select * from emp where empid = 102 for update;后,出现的间隙锁只是102本身还是还有其他? 2.为什么session_2执行mysql>insert into emp(empid,...) values(201,...); 会出现加锁?
看for update的字面意思感觉就挺能明白为啥insert的时候加锁了啊,而且应该是表锁,因为mysql不确定你select完了后是否update这条记录的主键,如果你刚好update emp set empid=201;那么自然跟insert的那个冲突了。除非你能事先告诉mysql你select完后只更新102,就只会有行锁了。