我在一个有int列的表上工作,该列会在发生某些事件时被扣除。该值是预先确定的,不能低于零。
将有很多并发SQL事务从数据库中声明值。只是一个柜台,就像演唱会门票的预订方式一样。
当前,我的逻辑不能保证它以有效的方式保持在0以上(更新前选择不能保证:()。是否有技巧来实施此业务规则?
如果该值不足,则该交易不应通过。
答案 0 :(得分:1)
解决方案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
查看受影响的行,看看这是否发生。
答案 1 :(得分:0)
您可以探索MySQL的CHECK约束。这样可以确保列的值永远不会低于零,也不需要使用SQL代码来验证计数器。
样本表定义:-
CREATE TABLE IF NOT EXISTS events (
event_count DECIMAL(10 , 2 ) NOT NULL CHECK(cost >= 0),
price DECIMAL (10,2) NOT NULL
);
答案 2 :(得分:0)