Установить минимальное значение поля MySQL - возможно?

Быстрый вопрос новичка MySQL. Каким будет самый простой способ убедиться, что минимальное значение данного поля равно 0?

По сути, у нас есть сценарий, который запускается автоматически и каждые 15 минут вычитает целое значение из значения поля, но мы хотим, чтобы любая запись, которая достигает 0, оставалась равной 0 и не стала отрицательной.

Это можно было бы просто сделать с помощью цикла в PHP, но я пытаюсь ограничить обращения к базе данных...

Есть ли простой способ либо сделать минимальное значение для поля равным 0, либо сделать так, чтобы любое отрицательное значение, помещенное в это поле, автоматически становилось 0?

Спасибо!


person user405056    schedule 05.08.2010    source источник
comment
Просто измените свой запрос на обновление, чтобы искать значения в указанном поле, которые больше 0 или, что еще лучше, больше, чем сумма, которую вы собираетесь вычесть.   -  person kmfk    schedule 05.08.2010
comment
Ух ты. Так просто. Я всегда забываю, что вы можете использовать условные выражения в предложении WHERE. Большое спасибо!   -  person user405056    schedule 05.08.2010


Ответы (4)


Вы пробовали простое условное «ГДЕ» или проблема более сложна?

UPDATE mytable SET mycolumn=mycolumn-1 WHERE mycolumn>0
person treeface    schedule 05.08.2010

вы можете установить атрибут UNSIGNED для своего поля. mysql выдаст ошибку, если вы попытаетесь установить в этом поле что-то ‹ 0.

person Sergey Eremin    schedule 05.08.2010
comment
Неа. Никакой ошибки, просто предупреждение. MySQL по-прежнему будет выполнять вычитание. в базовом поле без знака int, 0 - 1 = 4294967295 - person Marc B; 06.08.2010
comment
да, просто предупреждение, но строка вставляется с 0 вместо отрицательного значения. только что протестировал его на mysql 5.1.41-3ubuntu12.6, столбец int (10) без знака NOT NULL - person Sergey Eremin; 06.08.2010

Вы можете добавить логику в свой скрипт, чтобы не вычитать из значения, если значение уже равно нулю...

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

person OMG Ponies    schedule 05.08.2010

Распространенным способом сделать это было бы ограничение CHECK, но MySQL не поддерживает это.

Поэтому либо сделайте столбец беззнаковым, либо убедитесь, что в логике вашего приложения вы вычитаете значение только тогда, когда оно > 0.

person Juha Syrjälä    schedule 05.08.2010