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

场景还原(一)
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会报错,主键冲突异常。说明在行上面进行了锁定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,076评论 0 13
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,484评论 0 9
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,051评论 0 8
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,522评论 1 8
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,883评论 0 10