Декремент в mysql превышает ноль

Я пытаюсь сделать это в MySQL:

ОБНОВЛЕНИЕ таблицы SET значение = значение - 1 ГДЕ бла-бла

Если значение равно 0, и это значение запуска устанавливается равным 4294967295. Это связано с тем, что это целое число без знака, поэтому оно округляется до максимального значения.

Как мне сделать так, чтобы вместо этого он оставался на нуле? Могу ли я сделать это чисто в sql?


person Mr_Chimp    schedule 29.11.2009    source источник
comment
К вашему сведению: вычитание между целочисленными значениями, где одно из них имеет тип UNSIGNED, по умолчанию дает беззнаковый результат. Если в противном случае результат был бы отрицательным, он становится максимальным целочисленным значением. Если включен режим SQL NO_UNSIGNED_SUBTRACTION, результат будет отрицательным: dev .mysql.com/doc/refman/5.1/en/numeric-types.html   -  person OMG Ponies    schedule 29.11.2009
comment
Связано: stackoverflow.com/questions/1517556/mysql-query-gone-wild   -  person OMG Ponies    schedule 29.11.2009


Ответы (5)


Используйте предложение where, чтобы указать значение > 0

В воскресенье вечером SQL всегда причиняет мне боль. :-)

person Karl    schedule 29.11.2009

Просто добавьте к строке SQL AND value > 0

person Jacob Relkin    schedule 29.11.2009

Можно запустить второй запрос или if-оператор, проверив, установлен ли он на максимум, и установить обратно в 0. Но это какая-то глупость...

Напишите быструю функцию, которая проверяет запись, если она уже равна 0, не выполняйте никаких запросов на обновление.

(if value >= 0, do not perform xy)

person Julius F    schedule 29.11.2009

person    schedule
comment
facepalm Очевидно. Благодарю вас! - person Mr_Chimp; 29.11.2009

person    schedule
comment
Да, именно поэтому он тоже получил мой голос. Но это не единственное возможное решение :-) - person Joey; 29.11.2009
comment
Я буду использовать роб, так как он проще, но интересно, что вы можете это сделать. - person Mr_Chimp; 29.11.2009
comment
Это зависит от того, хотите ли вы обновить другие столбцы в запросе SQL. - person Thomas Decaux; 28.07.2013