mysql update 锁的问题

准备

建表语句

create table if not exists tab_no_index
(
    id int null,
    name varchar(10) null
);

create index ind_tab_no_index_id
    on test.tab_no_index (id);

插入数据

INSERT INTO tab_no_index (id, name) VALUES (1, '1');
INSERT INTO tab_no_index (id, name) VALUES (2, '2');
INSERT INTO tab_no_index (id, name) VALUES (3, '3');
INSERT INTO tab_no_index (id, name) VALUES (4, '4');

场景

场景一

根据 id 字段进行更新,验证是锁当前行。

截屏2020-07-15 下午2.06.37.png

sql 执行时序

session 1 session 2
start transaction;
start transaction;
update tab_no_index set name=11 where id=1
update tab_no_index set name=22 where id=2

以上顺序执行sql,session 2的 update 语句不会被阻塞。

场景二

根据 name 字段进行更新,验证是锁所有行。

截屏2020-07-15 下午2.09.27.png

sql 执行时序

session 1 session 2
start transaction;
start transaction;
update tab_no_index set id=11 where name=1
update tab_no_index set id=22 where name2

以上顺序执行sql,session 2的 update 语句被阻塞。

你可能感兴趣的:(mysql update 锁的问题)