mysql - SQL - 扣除列值直到非负值
问题描述
我在一张表上工作,该表有一个 int 列,当某些事件发生时会被扣除。该值是预先确定的,不能低于零。
会有很多并发的 SQL 事务来从数据库中获取值。它只是一个柜台,就像音乐会门票的预订方式一样。
目前,我的逻辑不能保证它以有效的方式保持在 0 以上(更新前选择不能保证 :( )。是否有执行此业务规则的技巧?
如果价值不足,交易不应该通过。
解决方案
解决方案 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
查看受影响的行,看看是否发生了这种情况。
推荐阅读
- javascript - 如何使用 React js 在 onchange 中将数据从一个组件传递到另一个组件
- dart - Flutter- 使用 BlendMode.xor 取消屏蔽公共部分
- azure - 使用 powershell 在 Azure VM 上启动和停止 Windows 服务
- java - 在 vert.x 中,为什么静态方法在静态代码块之前运行?
- javascript - 如何验证语义用户界面中的十进制字段?
- laravel - Laravel 5.6 上的数据格式
- java - REST ASSURED TEST 创建我自己的 given() 方法
- azure - 更改 azure ad b2b 目录上的令牌到期时间
- biztalk - BizTalk HTTP 适配器替换字符串“系统找不到指定的文件”。进入 URL - 为什么?
- c++ - 输入日、月、年并存储在单独的结构中