背景知识:
我们知道innoDB行锁是通过给索引上的索引项加锁来实现的而不是表记录上.
那现在两个事务给同一条记录的不同索引项加锁,这种情况innoDB怎么处理.
案例描述:
CREATE TABLE tab_no_index
(id
int(11) NOT NULL, name
varchar(10) DEFAULT NULL,
KEY name
(name
),KEY id
(id
)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tab_no_index VALUES(1,'1'),(2,'2'),(3,'3'),(4,'4');
Session1:
select * from tab_no_index where id = 1 for update;
Session2:
select * from tab_no_index where name = '1' for update;
我的理解这两个查询分别是给id索引和name索引加锁,那是怎么防止并发修改的?
当InnoDB表有多个索引的时候,不同事务使用不同的索引去锁定同一条记录是怎么处理的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- oyljerry 2017-11-28 09:13关注
If a secondary index is used in a search and index record locks to be set are exclusive, InnoDB also retrieves the corresponding clustered index records and sets locks on them.
可以看到虽然用的不同辅助索引,但是相应的聚簇索引也会加锁,也就是主键会加锁,这样就防止并发修改了
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 keil的map文件中Image component sizes各项意思
- ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
- ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
- ¥15 划分vlan后,链路不通了?
- ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 Centos / PETGEM
- ¥15 划分vlan后不通了
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)