READ-COMMITTED级别
update where 主键/非索引字段
只会对行加next-key锁,此时的next-key锁没有gap。即使where后面跟的是范围也只对存在的行加next-key锁。因为不存在gap,所以只是对存在的行加锁。(锁主键)
REPEATABLE READ级别
对普通对字段进行更新
update where 非索引字段 因为此时存在gap,将会对全表上next-key锁。即使执行类似这样的语句:update where 非索引字段=‘表中不存在的值’ 也会导致全表next-key锁。但是update where 主键=‘表中不存在的主键’ 就不会出现锁冲突,这就是主键的特殊之处。
总结:在rr级别下不走索引更新,要完蛋。
5.7.26-mysql不同隔离级别下执行sql的上锁情况-building
原文:https://www.cnblogs.com/coolgame/p/12118736.html