现在有一个字段,类型为int,能否仅通过mysql自身的sql语句或配置,来实现该字段只增不减的功能?
比如说现在有一条记录,这个字段的值是1400,现在要对该字段进行UPDATE操作,当UPDATE SET为1300时,就失败,当UPDATE SET为1500时,就成功。
我不想通过后端代码来实现的原因,是因为觉得为了更新记录,单独再查一遍,有点浪费了。
现在有一个字段,类型为int,能否仅通过mysql自身的sql语句或配置,来实现该字段只增不减的功能?
比如说现在有一条记录,这个字段的值是1400,现在要对该字段进行UPDATE操作,当UPDATE SET为1300时,就失败,当UPDATE SET为1500时,就成功。
我不想通过后端代码来实现的原因,是因为觉得为了更新记录,单独再查一遍,有点浪费了。
我今天也遇到这个问题了,目前找到两种方法,一种是mybaits里xml
update 表 AS a
inner join(select a.值 from 表 AS a WHERE 匹配条件) b
SET
a.值 =GREATEST(b.值, #{变量})
WHERE
匹配条件
一种设置触发器,设置触发器是强约束,如果再想改小只能先删后加
CREATE TRIGGER `触发器名字` BEFORE UPDATE ON `表` FOR EACH ROW SET NEW.值 = GREATEST(NEW.值, OLD.值);
不知道还有没有更好的方法
5 回答3.3k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
update test set value=1500 where id=1 and value<1500
然后获取影响条数就可以了。
最后,你要留意这个值,这样的更新在并发的情况下,无法做到数据的一致性。