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)
两者都能插入。没有争议。
我有一个 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)
两者都能插入。没有争议。