更新后如何检查最大约束?

时间:2013-11-30 09:58:25

标签: mysql sql-update

我为我的客户准备了一张桌子,其中我有他们的个人信息和分数。这个分数应该是0到1000之间的数字。我使用MySql作为DBMS,我将通过类似这样的查询更新客户端分数:

UPDATE client SET score=score+'[insertedScore]' where id='[id]';

其中[id]是客户的id和[insertedScore]是我应该在她的分数中插入的分数。 如何告诉mysql检查此更新后的分数是否超过1000,将其更改为1000?

注意:效果对我来说是一个重要问题。

2 个答案:

答案 0 :(得分:1)

我可能会遗漏一些东西,但以下情况如何:

Update Client set Score = 1000 where Score > 1000;

在您完成所有更新后,只需运行一次。

当然,简单的方法是在运行更新之前验证插入的值,并确保它不能超过1000.然后不需要更新!

编辑:也许尝试这样的事情(这是SQL Server,我知道你需要mySQL但希望语法大致相同) -

Update Client Set Score = 
( Case 
   WHEN score=score+'[insertedScore]' > 1000 THEN 1000
   ELSE score=score+'[insertedScore]'
  END
)
WHERE ID = '[ID]';

答案 1 :(得分:1)

您可以使用MySQL的LEAST()功能:

UPDATE Client SET Score = LEAST(Score + ?, 1000) WHERE id = ?

甚至可以在trigger内实现它,在这种情况下,您的现有 UPDATE命令将被限制为指定的最大值:

CREATE TRIGGER xyz BEFORE UPDATE ON Client FOR EACH ROW
  SET NEW.Score = LEAST(NEW.Score, 1000)