У меня есть таблица с составным первичным ключом (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?
Если да, есть ли какая-то часть документации, которая специально решает эту проблему или объясняет некоторые причины этого?
INSERT... ON DUPLICATE KEY UPDATE...
форма INSERT
фактически пытается выполнить операцию вставки. Только когда вставка встречается с дубликатным ключом, она переключается на UPDATE
.
Можно подумать, что планировщик запросов мог каким-то образом обнаружить дубликат ключа, не пытаясь вставить его. Но во всех случаях это не так и, вероятно, не может быть.
Можно представить себе выражение INSERT... ON ERROR UPDATE...
Но этого утверждения не существует.
Это объясняет, почему ошибка преобразования типа данных в INSERT
приводит к сбою всего запроса.
equation e + -1
?? И как всегда больше 0?is working perfectly
так в чем ошибка?