首页 > 解决方案 > Mysql通过添加o减去带有限制的值来更新先前的值

问题描述

我有这个查询

UPDATE posts_flags
    INNER JOIN
    users ON (posts_flags.user_id = users.id )
SET 
    users.credibility = users.credibility + 100 /* or -100 */
WHERE posts_flags.content_id = ?;

是否可以将新值限制在一个范围内,例如 0 - 1000 ?

标签: mysqlsql

解决方案


您可以添加一个CHECK约束,以通常避免任何超出允许范围的插入/更新。

CREATE TABLE post_flags
(
  credibility INT CHECK (credibility >= 0 AND credibility <= 1000),
);

如果您想在插入/更新时给它一个上限,请使用MAX给该值一个下限。MIN

UPDATE posts_flags
    INNER JOIN
    users ON (posts_flags.user_id = users.id )
SET 
    users.credibility = MAX(MIN(users.credibility + 100, 1000), 0)
WHERE posts_flags.content_id = ?;

https://www.w3schools.com/sql/sql_check.asp
https://www.w3schools.com/sql/func_mysql_min.asp


推荐阅读