replace into死锁引发的思考

2019-04-26  本文已影响0人  pangzhaojie

锁日志输出参考八怪大神

版本:Percona MySQL 5.7.22
对于锁的学习我做了一些输出详细参考如下:
https://github.com/gaopengcarl/percona-server-locks-detail-5.7.22.git
其中有readme


问题列表

接下来我们做两个实验,验证问题

表结构

CREATE TABLE `tmp` (
  `id` int(11) NOT NULL,
  `code` int(11) DEFAULT NULL,
  `name` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表数据

表内容

实验1

事务隔离级别RR

实验2

在进行实验2前,首先得说明replace into语句,针对已经存在的记录,语句可以拆分为delete+insert,下面我们假设两个事务同时执行这个语句

事务隔离级别RR

事务1 事务2
delete from tmp where code = 5; -
- delete from tmp where code = 5;
insert into tmp values(10,5,5); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
事务1 事务2
LOCK_X LOCK_NOT_GAP -
- LOCK_X-LOCK_NEXT_KEY 阻塞
LOCK_S-LOCK_NEXT_KEY 死锁回滚
上一篇 下一篇

猜你喜欢

热点阅读