2

Я работаю над приложением, поддерживаемым экземпляром MySQL, и столкнулся со странным поведением, которое включает в себя то, что кажется "фантомными" вставками.

Учитывая таблицу с автоинкрементным целочисленным ключом, я выполняю следующее:

  1. INSERT ... // generates ID 1
  2. INSERT ... // generates ID 2
  3. INSERT ... // generates ID 3
  4. SELECT * // returns the set of elements 1 and 3

Похоже, что вторая вставка генерирует идентификатор и возвращает клиенту до того, как вставка завершена, поэтому я могу одновременно знать идентификатор и не иметь возможности выбирать данные. Это удивительно - я думаю, что вставка не вернется, пока не будет вставлена строка.

Можно ли сказать, что MySQL одновременно выделяет идентификатор и вставляет строку в одну атомарную операцию, так что, как только я узнаю идентификатор 2 , он гарантированно вернется из запроса выбора?

1 ответ1

4

Уловка, которую я регулярно использую для решения этой проблемы, заключается в создании хранимой подпрограммы, которую я проверяю как атомарную, используя следующее:

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
     [your queries here]
COMMIT;

Я думаю, что вы можете имитировать это поведение программно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .