Выберите затем Удалить в транзакции - Избегайте другого запроса Выбор между? (Блокировка таблицы?) - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу иметь возможность получить 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%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...