SQL-扣除列值,直到非负值

时间:2018-11-30 01:47:07

标签: mysql sql database rdbms acid

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

将有很多并发SQL事务从数据库中声明值。只是一个柜台,就像演唱会门票的预订方式一样。

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

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

3 个答案:

答案 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)

似乎您需要某种锁定机制。

该功能在MySQL中可用: