根据mysql参考https://dev.mysql.com/doc/refman/8.0/en/innodb-locks-set.html
我的问题是: 1.什么时候只使用间隙锁?什么时候使用下一个键锁?为什么? 2. mysql服务器层与innodb lock之间的交互过程是什么?
在同一页面上:https://dev.mysql.com/doc/refman/8.0/en/innodb-locks-set.html
INSERT在插入的行上设置排他锁。该锁是索引记录锁,而不是下一键锁(即没有间隙锁),并且不会阻止其他会话插入到插入行之前的间隙中。
INSERT ... ON重复键更新与简单INSERT的不同之处在于,当发生重复键错误时,将排他锁而不是共享锁放在要更新的行上。对重复的主键值采用排它索引记录锁定。对于重复的唯一键值,将使用独占的下一键锁。
为什么在使用INSERT ... ON DUPLICATE KEY UPDATE而不是记录锁定时将next-key锁定用于重复的唯一密钥?