MySQL 锁定与索引的关系
正在尝试了解锁和索引之间的关系。
有以下表格
CREATE TABLE example_table (
id INT AUTO_INCREMENT,
col1 VARCHAR(255),
col2 INT,
PRIMARY KEY (id)
);
INSERT INTO example_table (col1, col2) VALUES ('a',1);
INSERT INTO example_table (col1, col2) VALUES ('b',2);
INSERT INTO example_table (col1, col2) VALUES ('c',3);
INSERT INTO example_table (col1, col2) VALUES ('d',4);
当我对 2 个单独的事务运行以下查询时,我得到
SELECT * FROM example_table where col1="a" FOR UPDATE;
和
SELECT * FROM example_table where col1="b" FOR UPDATE;
当运行第 2 个查询时,它会等待第 1 个查询释放独占锁。
但是如果向 col1 添加索引,则运行这两个 slecet 查询不会等待彼此的锁。
为什么在非索引查询上查询时,Who 表被锁定,而在索引列上查询时,只有所需的行被锁定?select ... for updateselect ... for update