Ниже кажется фору мне:ON KEY UPDATE DUPLICATE - значение декремента в MySQL
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
Предположим, ваш NUMERICVALUE
находится на 0.
выше изменит его до 100 - что делает работу.
Если, однако, вы ввели -100, он не работает должным образом.
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','-100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
Вышеприведенное заявление должно вернуть его в 0. В моем случае это не так. Он остается на уровне 100.
Есть ли у меня что-то?
Редактировать: Это происходит не так, как в другом месте. Я делаю это с PHP. Фактический код, показывающий эту ошибку, выглядит следующим образом:
Редактировать 2: Это тоже не имело ничего общего с PHP. Проблема заключалась в том, что значение NUMERIC было UNSIGNED в моей производственной среде, а значение VALUES (NUMERICVALUE) было перенесено с -100 на 0 до его использования.
Я просто попробовал SQLFiddel и свою собственную 5.7 DB. Вы правы - все было так, как ожидалось. Я делаю это через PHP, и, очевидно, это происходит неправильно в другом месте. Я попытаюсь продолжить исследование. – nickdnk
Хорошо, просто постарайтесь изолировать проблему на один шаг за раз :) – Benjamin
См. Обновленный ответ с примером PHP. – nickdnk