我有一个包含2列id
和myvalue
的表。 id
是主键,myvalue
是unsigned smallint
。 myvalue
1当前的id
为0。我有以下sql查询:
UPDATE tablename SET myvalue = IF(myvalue - 1 > 0, myvalue - 1, 0) WHERE id = 1;
我收到以下错误:
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(`dbname`.`tablename`.`myvalue` - 1)'
知道为什么会这样吗?我找不到与此有关的任何在线资源。
如果我更改表以从myvalue
列中删除未签名,则相同的查询有效。
答案 0 :(得分:2)
如果myvalue为0,则myvalue-1将为负,您不能将其放入无符号整数(否则它将是无符号整数的最大值)。
这是相同的检查,但不使用myvalue-1。
UPDATE tablename SET myvalue = IF(myvalue > 1, myvalue - 1, 0) WHERE id = 1;
答案 1 :(得分:0)
我将在where
子句中进行过滤:
update t
set myvalue = myvalue - 1
where myvalue > 0 and id = 1;