mysql 如何锁住一行不存在的记录

2019-10-28  本文已影响0人  瑶瑶小仙女

场景还原(一)
1、先开启事务A,删除一行不存在的数据。

start transaction;
begin;
delete from id_name where id=40;

2、开启事务B,在上面删除的Id位置上插入一条新记录

start transaction;
begin;
insert into id_name values(40, 'c');

注意两个事务都是未提交的。你会看到事务B在等待事务A的提交。

场景还原(二)
原始数据:


image.png

1、开启事务A,插入一条记录

start transaction;
begin;
insert into id_name values(11, '1234');

2、开启事务B并插入一条记录

start transaction;
begin;
insert into id_name values(12, '12');
COMMIT;

我们发现不同行上面不会进行行级锁。

场景还原(三)
1、开启事务A,插入一条记录

start transaction;
begin;
insert into id_name values(11, '1234');

2、开启事务B并插入一条记录

start transaction;
begin;
insert into id_name values(11, '12');
COMMIT;

我们发现事务B无法提交,等我们提交了事务A之后事务B会报错,主键冲突异常。说明在行上面进行了锁定。

上一篇下一篇

猜你喜欢

热点阅读