私の MySQL データベースには unsigned mediumint 列があり、その値を増減させ続けています。
ただし、値が 0 のときに減少しないようにしたいのです。そうすると、UPDATE によって値が mediumint の最大値 16777215 になるようになります。
したがって、減分するときに次のクエリがあります。
UPDATE `counters` SET `received`=IF(CAST(`received`-1 AS SIGNED)>0, `received`-1, 0) WHERE `id`="1234"
これは、たった 1 つのクエリで作業するための唯一のトリックでした。
MySQL 5.1 では非常にうまく機能しますが、昨日 MySQL 5.5 にアップグレードしたところ、次のエラーが発生しました。
BIGINT UNSIGNED value is out of range in '(`db_main`.`counters`.`received` - 1)'
これを修正する方法はありますか?
または... 1つだけのクエリで、1から0を引くときに「16777215」の値を取らないことを確認する他の方法はありますか?
編集- 「 AND 受信 > 0」を追加して、WHERE を使用できます。問題は、2 つの列を同時に更新したい場合があり、WHERE 句にすべての列 > 0 を入れると、どの列も更新されないということです。
ありがとうございました。