Поймите - обнаружен тупик при попытке получить блокировку; попробуйте перезапустить транзакцию - PullRequest
0 голосов
/ 04 февраля 2020

Я использую один REST API, который вставляет или обновляет запись в таблице mysql на основе уникального ключа. При использовании этого параллельного API, в некоторых случаях я получаю состояние ошибки: «Обнаружен тупик при попытке получить блокировку; попробуйте перезапустить транзакцию. У меня нет доступа к серверу для проверки журналов.

Хотя мне любопытно знать, что даже несколько абонентов вызывают этот API во время этого процесса, если mysql использует блокировку на уровне строк для вставки / обновления записи также в идеале он не должен создавать взаимоблокировку, а другие вызовы должны ждать получения блокировки.

Например, вызывающий абонент A вызывает этот API и принимает блокировку на уровне строк в таблице 'tableA', тогда вызов вызывающего абонента B должен ждать, пока вызывающий абонент A не сделает этого. снять блокировку, и она не должна бросить тупик. Пожалуйста, помогите мне понять это.

Ниже приведен табличный запрос, которым я пользуюсь.

INSERT INTO tableA (A,B,C,D) VALUES
        {{INSERT_CLAUSE}}
        ON DUPLICATE KEY UPDATE `D`= (D) + 1, E = now()";

Уникальный ключ для столбцов - A, B, C

PS Я прошел через все другие предложенные ответы, но, похоже, ничто не проясняет этого сомнения.

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