SELECT для модификаторов UPDATE и LOCK IN SHARE эффективно работают в режиме READ-COMMITTED, даже если текущий режим изоляции - REPEATABLE-READ. Это сделано потому, что Innodb может заблокировать только текущую версию строки. Подумайте об аналогичном случае и удаляемой строке. Даже если бы Innodb смог установить блокировки в строках, которых больше не существует - это вам поможет? Не совсем - например, вы можете попытаться обновить строку, которую вы только что заблокировали, с помощью SELECT FOR UPDATE, но эта строка уже пропала, поэтому вы получите довольно неожиданную ошибку при обновлении строки, которую, как вы думали, вы заблокировали успешно. В любом случае, все сделано так, что все остальные решения будут еще более хлопотными.
LOCK IN SHARE MODE на самом деле часто используется для обхода многовариантности и обеспечения того, чтобы мы считывали большинство текущих данных, а также для гарантии того, что их нельзя изменить. Это, например, может быть использовано для считывания набора строк, вычисления новых значений для некоторых из них и записи их обратно. Если мы не будем использовать LOCK IN SHARE MODE, у нас могут возникнуть проблемы, поскольку строки могут обновляться до того, как мы напишем им новые значения, и такое обновление может быть потеряно.