MySQL:如何减少 unsigned int 列?

evi*_*iko 8 mysql

我有一个带有列的表unsigned int,让我们将其命名为 col1。

我想将列递减一个数字,如果递减后的值小于 1,则将其设置为 1。像这样:

UPDATE `tbl1` SET `col1` = GREATEST(1, `col1`-3);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果 col1 是 0 或 1 或 2 并且我尝试做 -3 然后 MySQL 抛出错误。

我试过这个这个,但没有奏效。

DEa*_*rTh 5

您可以使用case子句

update tbl1 set col1 =  (case when col1 <= 3 then 1 else (col1 - 3) end);
Run Code Online (Sandbox Code Playgroud)

正如@RDFozz 所描述的:

使用 OP 列出的代码,必须计算 col1 - 3,并且由于它是无符号整数,因此结果必须是无符号整数。除非结果实际上是无符号整数,否则此代码可防止计算发生。

更新 :

@kondybas 建议的另一种可能方式

update tbl1 set col1 = IF(col1<=3, 1, col1-3);
Run Code Online (Sandbox Code Playgroud)

  • 优秀的点。使用 OP 列出的代码,必须计算 `col1 - 3`,并且由于它是一个无符号整数,所以结果必须是一个无符号整数。除非结果实际上是一个无符号整数,否则您的替代代码会阻止计算发生。 (2认同)
  • 另一种方法是使用`IF()`函数:`SET col1 = IF(col1&lt;3, 1, col1-3)` (2认同)