为什么我可以在 innodb 的一条记录上有两个锁(X 和 S)?我知道S和X锁不能同时存在

why i can have two locks( X and S) on one record in innodb? i know that S and X lock can not exists at the same time

为什么我在 innodb 中的一条记录上可以有两个锁(X 和 S)?我知道S锁和X锁不能同时存在

你不能。您的 S 锁升级为 X 锁,这两个查询在同一事务中按顺序执行。你两者都没有。

如果第二个事务也获得了相同记录上的 S 锁,然后你的 FOR UPDATE 查询是 运行,它至少会阻塞直到另一个事务进行下一步操作,也许更长的时间,直到可能发生锁升级或确定不可能。最终提示会 return 否则你会陷入僵局。