Обновление неподписанного INT терпит неудачу с низкими значениями на MySQL

0

У меня есть таблица с составным первичным ключом (a, b), где я хочу обновить несколько столбцов с помощью синтаксиса INSERT... ON DUPLICATE KEY UPDATE.

INSERT INTO table_a (a, b, c, d, e) VALUES (1533571200, 1, 7, 1, -1) 
ON DUPLICATE KEY UPDATE  c = c + 7, d = d + 1, e = e - 1;

Это отлично работает для всех столбцов, кроме тех, у которых значение UNSIGNED (столбец e).

Допустим, что уравнение e-1 всегда дает число больше 0 и меньше 100, возможно ли, что выполнение запроса пытается выполнить инструкцию INSERT независимо от проверки DUPLICATE KEY?

Если да, есть ли какая-то часть документации, которая специально решает эту проблему или объясняет некоторые причины этого?

  • 0
    Что такое equation e + -1 ?? И как всегда больше 0?
  • 0
    is working perfectly так в чем ошибка?
Показать ещё 12 комментариев
Теги:
unsigned-integer
on-duplicate-key

1 ответ

0

INSERT... ON DUPLICATE KEY UPDATE... форма INSERT фактически пытается выполнить операцию вставки. Только когда вставка встречается с дубликатным ключом, она переключается на UPDATE.

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

Можно представить себе выражение INSERT... ON ERROR UPDATE... Но этого утверждения не существует.

Это объясняет, почему ошибка преобразования типа данных в INSERT приводит к сбою всего запроса.

  • 0
    Я думаю, что планировщик запросов может обнаружить дубликат ключа, прежде чем выдать ошибку. Отключение strict_mode позволяет выполнить обновление, а ошибка снижается до предупреждения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню