我有一个列调用令牌,它存储用户的信用。
此列可以是加或减,我想将最小数字设置为零。
实施例。 0 - 1将存储0,(不是-1)
是否可以在此列中将最小数字设置为零?
UPDATE 'table' SET token = token -1 (if token is 0, it will not small than 0)
答案 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 ;
获取触发器的想法
如果您想使用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
的值,该值应为正数。