Я использую один 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 Я прошел через все другие предложенные ответы, но, похоже, ничто не проясняет этого сомнения.