Я использую сервер socket.io, и несколько клиентов делают запросы к этому серверу. Сервер проверяет таблицу MySQLinnoDB на наличие данных и, если есть какие-то данные, обновляет свой бит / столбец в таблице и отправляет данные запрашиваемому клиенту.
Но проблема в том, что несколько моих клиентов иногда получают одни и те же данные.
Причина, по которой я считаю, заключается в том, что 2 клиента делают запросы к серверу в один и тот же момент времени, и оба получают одну и ту же запись строки таблицы MySQL до того, как она была обновлена другим клиентом.
Возможный дубликат Блокировка строки в таблице MYSQL во время транзакции
@ t.niese - ссылка, которой вы поделились, отличается. Эта блокировка не блокирует строку для чтения. Я хочу заблокировать чтение, это означает, что строка, которую обрабатывает одно соединение, не должна читаться другим соединением.
Если вы используете FOR UPDATE, то Other transactions are blocked from updating those rows, from doing SELECT ... FOR SHARE, or from reading the data in certain transaction isolation levels.. Поэтому, если ваш уровень изоляции настроен правильно, у вас не может быть двух транзакций с SELECT .. FOR UPDATE в одной строке. Таким образом, либо вторая транзакция завершится неудачно, либо будет ждать завершения первого FOR UPDATE.






Если вы используете полученные данные для последующего выбора, вставки или обновления, тогда вы должны использовать ДЛЯ ОБНОВЛЕНИЯ ИЛИ ДЛЯ ПОДЕЛИТЬСЯ в транзакции.