один из способов выполнить задачу:
вам нужно будет добавить поле «блокировка» к вашей таблице.
, затем вы должны написать хранимую процедуру, которая будет принимать некоторый идентификатор в качестве параметра, атомарно выбрать строку с блокировкой NULL, обновить строку таким образом, чтобы блокировка содержала переданный идентификатор, а затем вернуть значение.
Пока хранимая процедура выполняется атомарно (любые другие запросы для таблицы будут ждать до тех пор, пока эта процедура не будет завершена), каждый клиент, вызывающий эту процедуру, получит другое значение, в котором поле блокировки все еще не заполнено. Как только значение возвращается, клиент уверен, что для строки, содержащей это значение, в поле блокировки установлено какое-то значение, и оно не будет возвращено.
После внесения изменений вы должны обновить строку, записать новое значение и установить для поля блокировки значение NULL, тем самым «разблокировав» строку для будущих запросов.