mysql - 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 ?
解决方案
您可以添加一个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
推荐阅读
- mysql - redis和mysql之间的数据同步
- sql - 如何在sql中获取从今天开始的最近1个月的数据?
- docker - 为什么 docker 的 rabbitMQ 容器不以(几乎)类似的命令开始?
- r - 获取rds文件的行数和列数而不在R中加载它?
- html - 使用纯 CSS 显示/隐藏元素的单个按钮
- python - 从枚举类中获取值,其中枚举成员名称在 Python 中运行时已知
- reactjs - React jest-enzyme 模拟变化抛出警告:受控到不受控的变化
- javascript - 如何将pdf文件发送给用户
- reactjs - 如何根据值更改 ANTD 表中的单元格颜色?
- python - 雪花 python 连接器 - 是时候建立数据库连接了