夕时明月 2017-11-28 08:03 采纳率: 100%
浏览 1618
已采纳

当InnoDB表有多个索引的时候,不同事务使用不同的索引去锁定同一条记录是怎么处理的

背景知识:
我们知道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索引加锁,那是怎么防止并发修改的?

  • 写回答

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.

    可以看到虽然用的不同辅助索引,但是相应的聚簇索引也会加锁,也就是主键会加锁,这样就防止并发修改了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况