项目正式环境查询数据库 发现 丢失了一半的数据 ,那发生的频率就很高了, 检查死锁日志 ,
如下:
UPDATE container_dynamic
SET new_state = 0
WHERE box_code = 'xx'
分析死锁日志发现 事务1 正在等待s锁,事务2 持有 s 锁和 x 锁 no gap, 并且在等待 s锁 update 在 死锁中 的 insert 语句前执行
接下来 我们模拟 这个场景来重现 这个死锁。开启三个事务:
事务t :
BEGIN;
UPDATE `t` SET age = age+1 WHERE `name` = 'a'; -- x no gap
INSERT INTO `t` VAL