PHP MYSQL Limit Row для обновления пользователем

Как лучше не допускать одновременного обновления строк в базе данных несколькими пользователями?

У меня есть страница формы php с множеством полей, которые пользователь будет обновлять. Существует много форматирования javascript «условного типа», поэтому пользователь будет тратить несколько минут на этой странице. Мне нужно заблокировать строку в базе данных, чтобы другой пользователь не пытался редактировать эту же строку. Другим пользователям потребуется доступ к другим строкам, поэтому блокировка всей таблицы невозможна.

Если я установлю немного, чтобы знать, редактирует ли пользователь строку, что произойдет, если пользователь не сохранит, не обновит или не удалит строку с помощью функций на странице, чтобы я мог сбросить этот бит? Они могут просто неожиданно закрыть браузер, аварийно завершить работу, иметь время ожидания сеанса и т. Д.

Я попытался «Выбрать для обновления», но, кажется, сбрасывается, как только строка извлекается из БД. Ряд становится доступным практически мгновенно. Я тестирую с двумя разными браузерами, поэтому с двумя разными сессиями.

Я использую PHP 7.027, MySql

Просто ищу общее направление движения. Кажется, я ничего не могу найти в Интернете или в моих книгах. Спасибо за любой вклад.

1

Решение

Ответ уже описан здесь: https://softwareengineering.stackexchange.com/a/184098/317637.

Основная суть в том, что вы должны использовать оптимистическая блокировка. Выдержка из ответа, упомянутого выше:

По сути, вам нужно пометить все ваши редактируемые записи временем последнего обновления. Когда вы пытаетесь сохранить запись, вы сначала проверяете, что запись в базе данных имеет ту же самую последнюю последнюю отметку времени, что и ваша запись. Если нет, то кто-то обновил запись, и теперь вам нужно либо получить обновленную запись и сообщить пользователю, что ему нужно снова внести свои изменения, либо вы можете попытаться объединить изменения пользователя в обновленную запись (что обычно получается быть простым или невозможным).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector