исключение уникального ключа при множественных вставках / обновлениях

У меня есть приложение, которое получает несколько запросов от внешних источников (счета от торговых точек). Он получает десятки запросов в секунду, и некоторые из этих запросов одинаковы (имеют одинаковое тело запроса).

данные запроса преобразуются и сохраняются в две связанные таблицы (внешний ключ). если запись уже существует (запрашивается по уникальному составному ключу), запись обновляется, в противном случае запись добавляется.

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

 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

Это, вероятно, какое-то состояние гонки в MySQL, но не могу понять

Весь процесс обернут в транзакцию Laravel. Я пытался установить разные уровни изоляции. SERIALIZABLE решает эту проблему, но затем я получаю множество исключений взаимоблокировок, и, как я вижу, иногда запись вообще не сохраняется.

0

Решение

Это просто, что здесь происходит, у вас есть какое-то значение, объявленное как «УНИКАЛЬНЫЙ» или «Первичный ключ» или что-то в этом роде, и вы пытаетесь вставить снова, какое-то ключевое ограничение блокирует вставку, это должно быть хорошо, вы избегаете дубликаты записей в вашей базе данных, но что вам нужно сделать, это проверить, существуют ли данные, которые вы пытаетесь вставить, ранее в базе данных, а не во всех столбцах, вы должны спросить ваши ключи или комбинацию клавиш, я не могу вам помочь больше если я не знаю данные или таблицу …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]