在我的 MySQL 数据库上,我有一个无符号的 mediumint 列,我不断增加和减少它的值。
但是,我想确保它的值为 0 时它不会递减。如果我这样做,UPDATE 将使该值取 mediumint 的最大值 16777215。
所以,我在递减时有这个查询:
UPDATE `counters` SET `received`=IF(CAST(`received`-1 AS SIGNED)>0, `received`-1, 0) WHERE `id`="1234"
这是我只能使用一个查询的唯一技巧。
它在 MySQL 5.1 上运行良好,但是,昨天我升级到 MySQL 5.5,现在我得到了这些错误:
BIGINT UNSIGNED value is out of range in '(`db_main`.`counters`.`received` - 1)'
有没有什么办法解决这一问题?
或者...是否有任何其他方法可以确保仅在一个查询中,在将 1 减去 0 时不会采用“16777215”的值?
编辑- 我可以使用 WHERE,添加“AND received > 0”。问题是有时我想同时更新两列,如果我将所有列 > 0 放在 WHERE 子句中,它不会更新任何列。
谢谢你。