Я хочу иметь возможность получить N записей, удалить их и убедиться, что другие запросы не коснулись N записей, которые я выбрал / удалил.
Чтобы сделать выбор / удаление, я придумал следующее:
ID Auto-Inc | ... values
У меня будет кластеризованный индекс в поле идентификатора, поэтому я могу выбрать первый Nзаписи и иметь это быть исполнителем.
Я мог бы просто написать транзакцию для
SELECT * LIMIT 1000
FROM TABLE
ORDER BY ID
DELETE FROM TABLE
ORDER BY ID
LIMIT 1000
Что-то вроде этого, я думаю - это было какое-то время, ха-ха. Проблема здесь в том, что если другой сервер запросов / приложений читает какие-либо из этих записей, когда я пытаюсь это сделать, это означает, что мое будущее приложение сломается. Мне нужно иметь возможность гарантировать, что я могу выбрать N записей и удалить N записей с гарантией, что только (1) клиент / API-запрос, который выполняет вышеизложенное, получает эти N записей. Если два клиента / запроса / сервера приложений читают одни и те же данные GG.
Я понимаю, что есть шанс, что это гарантия от Транзакции, но я не уверен. Я думал, что транзакция гарантирует выполнение обоих или оба сбоя, но я не помню, если «истощает» другие запросы, затем блокирует таблицу, выполняет свою работу, а затем разблокирует таблицу на 100%.