Stack:
Если я правильно понимаю SELECT ... LOCK IN SHARE MODE, вы можете поместить его в транзакцию mysql, чтобы выбрать строки, с которыми вы будете работать во время этой транзакции, чтобы "заблокировать"«эти выбранные строки из действий по записи / удалению другого сеанса (но другие сеансы все еще могут читать строки) до тех пор, пока ваша транзакция не завершится, и в этот момент строки, заблокированные с помощью инструкции SELECT LOCK IN SHARE MODE, освобождаются, чтобы другие сеансы могли получить к ним доступ.для записи / удаления и т. д.
Это именно то, что я хочу для моей таблицы комментариев.Каждый раз, когда комментарий добавляется в сообщение на моем сайте, мне нужно заблокировать все строки комментариев, связанные с этим сообщением, в то время как я обновляю некоторые метаданные по всем заблокированным строкам.И если два комментария будут отправлены одновременно, я не хочу, чтобы они оба имели доступ к соответствующим строкам комментариев в одно и то же время, потому что они в основном испортят друг друга (и метаданные).Поэтому я хочу включить SELECT LOCK IN SHARE MODE в скрипт загрузки комментариев, чтобы первый сеанс, выполняющий блокировку в запросе, получил полный контроль над строками комментариев, пока не завершит всю транзакцию (и сценарий, который был немного медленнее, должен ждать, покався транзакция из первого сценария выполняется).
Я обеспокоен созданием взаимоблокировок, когда сценарий A блокирует данные, необходимые сценарию B, а сценарий B - данные, необходимые сценарию A.Как я могу обойти это в моем приложении?
Кроме того, я использую только innodb в базе данных моего веб-сайта, поэтому мне не нужно беспокоиться о правильной блокировке таблицы?