MySQL 在执行具有相同索引值的并发插入时会锁定索引行吗?

Will MySQL lock the index row when executing a concurrent insert with same index value?

我有一个 table 这样的:

create table `sample` (
  id int auto_increment,
  sid int,
  message varchar(100),
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_sid` (`sid`)
);

sid 不是唯一索引。

当我执行insert时,所有的记录都会有相同的sid值。这些插入语句是否会通过插入意向锁锁定行,因为它们都具有相同的插入索引?

测试一下!

Window 1:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into sample set sid = 42;
Query OK, 1 row affected (0.01 sec)

Window 2:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into sample set sid = 42;
Query OK, 1 row affected (0.00 sec)

两者都能插入。没有争议。