CREATE TABLE `dbcache` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`skey` varchar(32) NOT NULL,
`value1` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
注:默认隔离级别为“REPEATABLE-READ”
session 1:
session 2:
第三步:等到session 2释放 gap lock;
第四步:等待session 1释放gap lock,然后就完美死锁
大家肯定会问,为毛线要for update一个不存在的值,其实真实场景为:id如果存在,就更新,如果不存在,就写入,但是在并发场景下,就触发了一个目前无解的X锁兼容问题;所以大家在真实涉及事务项目中,一定要测试测试在测试,否则结果可能会颠覆自己所了解的一些知识;由于我们该业务的访问量不大,后把语句直接改为replace into,该问题绕开;
文章转载自dba流浪猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。