Здравствуйте.
Имеется таблица с записями, которые будут закреплены за разными пользователями. По умолчанию записи не привязаны ни к одному из пользователей.
Вид таблицы
id | user_id | data
1 | 0 | 123
2 | 0 | 456
3 | 0 | 798
Очередную свободную запись в этой таблице нужно закрепить за пользователем изменив user_id и получить эту измененную запись.
Я вижу алгоритм работы таким: выбираем одну свободную запись и меняем у нее user_id.
Проблема заключается в следующем, возможна ситуация, когда будет несколько одновременных запросов на получение свободной записи. Например, было инициировано два запроса на присвоение свободной записи пользователю посредством запросов на вебсервер. Была выбрана свободная запись, например, с id 1. Второй запрос так же выбрал запись с id 1, так как пока она свободна. Первый запрос присвоил значение user_id нужное ему и второй запрос сделал тоже самое.
В результате запись присвоена пользователю из второго запроса, а пользователь из первого остался ни с чем.
Как разрешается эта ситуация?