Добрый день! Предположим у нас есть таблица в БД с таким устройством:
int id
int user_id DEFAULT NULL
И у нас есть сервер на PHP который принимает ID записей из таблицы выше и записывает в user_id ID первого пользователя, что прислал запрос, например:
SELECT user_id FROM table WHERE id = ID что нам пришел от клиента
Если user_id == NULL
UPDATE table SET user_id = ID юзера что прислал запрос WHERE id = ID что нам пришел от клиента
Так как сервер естественно многопоточный, то появляется вероятность того, что 2 запроса от двух разных клиентов могут придти с одним и тем же ID практически в одно и тоже время. И для обоих проверка user_id == NULL будет истинной, и следовательно будет выполнено 2 UPDATE.
Собственно интересует, как можно избежать подобной прискорбной ситуации?
Есть идеи использовать row-level locking на ID что приходит от клиента сразу как только приходит запрос, но не ясно как это правильно реализовать.