избегайте повторяющейся ошибки ввода при обновлении уникального столбца

как обновить уникальный индекс в mysql, не получая повторяющуюся ошибку записи?

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

Я обнаружил, что ON DUPLICATE KEY не работает в запросе на обновление.


person abootorabi    schedule 30.08.2020    source источник


Ответы (1)


Используйте оператор update ignore ... вместо простого update ..., просто помните о побочных эффектах (последнее предложение цитаты ниже). В руководстве mysql по синтаксису обновления говорится:

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

Если побочные эффекты для вас неприемлемы, перед обновлением необходимо проверить повторяющиеся значения с помощью оператора select ... for update, чтобы заблокировать запись для обновления. Третьей альтернативой может быть игнорирование повторяющихся ключевых ошибок при обработке ошибок вашего приложения для этого оператора. Честно говоря, я бы выбрал последнее решение.

person Shadow    schedule 30.08.2020