MySQL - заблокировать строку для чтения

Я использую сервер socket.io, и несколько клиентов делают запросы к этому серверу. Сервер проверяет таблицу MySQLinnoDB на наличие данных и, если есть какие-то данные, обновляет свой бит / столбец в таблице и отправляет данные запрашиваемому клиенту.

Но проблема в том, что несколько моих клиентов иногда получают одни и те же данные.

Причина, по которой я считаю, заключается в том, что 2 клиента делают запросы к серверу в один и тот же момент времени, и оба получают одну и ту же запись строки таблицы MySQL до того, как она была обновлена ​​другим клиентом.

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

t.niese 19.11.2018 11:06

Возможный дубликат Блокировка строки в таблице MYSQL во время транзакции

t.niese 19.11.2018 11:10

@ t.niese - ссылка, которой вы поделились, отличается. Эта блокировка не блокирует строку для чтения. Я хочу заблокировать чтение, это означает, что строка, которую обрабатывает одно соединение, не должна читаться другим соединением.

Irfan DANISH 19.11.2018 11:43

Если вы используете 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.

t.niese 19.11.2018 13:25
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
583
0

Другие вопросы по теме