首页 > 解决方案 > SQL - 扣除列值直到非负值

问题描述

我在一张表上工作,该表有一个 int 列,当某些事件发生时会被扣除。该值是预先确定的,不能低于零。

会有很多并发的 SQL 事务来从数据库中获取值。它只是一个柜台,就像音乐会门票的预订方式一样。

目前,我的逻辑不能保证它以有效的方式保持在 0 以上(更新前选择不能保证 :( )。是否有执行此业务规则的技巧?

如果价值不足,交易不应该通过。

标签: mysqlsqldatabaserdbmsacid

解决方案


解决方案 1 - 使用无符号

ALTER TABLE events MODIFY event_count INT UNSIGNED NOT NULL

试图降低到 0 以下会出错。

解决方案 2 - 使用查询

UPDATE events SET event_count=event_count-1 WHERE event_id={X} AND event_count > 0

查看受影响的行,看看是否发生了这种情况。


推荐阅读