FOR UPDATE与LOCK IN SHARE MODE都是用于确保被选中的记录值不能被其它事务更新(上锁),两者的区别在于LOCK IN SHARE MODE不会阻塞其它事务读取被锁定行记录的值,而FOR UPDATE会阻塞其他锁定性读对锁定行的读取(非锁定性读仍然可以读取这些记录,LOCK IN SHARE MODE和FOR UPDATE都是锁定性读)。
这么说比较抽象,我们举个计数器的例子:在一条语句中读取一个值,然后在另一条语句中更新这个值。使用LOCK IN SHARE MODE的话可以允许两个事务读取相同的初始化值,所以执行两个事务之后最终计数器的值+1;而如果使用FOR UPDATE的话,会锁定第二个事务对记录值的读取直到第一个事务执行完成,这样计数器的最终结果就是+2了。