Mysql在列中设置最小数字(数字不小于零)

时间:2014-10-25 22:31:45

标签: mysql

我有一个列调用令牌,它存储用户的信用。

此列可以是加或减,我想将最小数字设置为零。

实施例。 0 - 1将存储0,(不是-1)

是否可以在此列中将最小数字设置为零?

UPDATE 'table' SET token = token -1 (if token is 0, it will not small than 0)

3 个答案:

答案 0 :(得分:2)

一个简单的解决方案是设置alter the column并将其类型设置为unsigned integer,默认值设置为0。

如果不可行并且可能导致意外问题,则必须在保存数据之前检查并适当设置该值。

答案 1 :(得分:1)

因为它是MySQL;您无法使用CHECK CONSTRAINT,但可以使用表格上的BEFORE INSERT触发器激活此约束,例如

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `table1`
FOR EACH ROW
BEGIN
    IF NEW.token < 0 THEN
        SIGNAL SQLSTATE '12345';
        SET MESSAGE_TEXT := 'check constraint on table1.Token failed';
    END IF;
END$$   
DELIMITER ; 

Mysql CHECK Constraint

获取触发器的想法

如果您想使用Token更改现有的< 0值,请执行UPDATE语句,如

UPDATE table1 SET token = 0 where token < 0

答案 2 :(得分:0)

我借用this question的答案,但这是一般性的想法:

UPDATE my_table 
SET token=IF(old_token_value - x < 0, 0, old_token_value - x) 
WHERE key_value='some value';

这是一个命令;我做了三行,所以它可以适应而不滚动。

这将采取old_token_value的{​​{1}},并减去token。如果它小于0,则将值设置为0.否则,使用x的值,该值应为正数。