我有一个列调用令牌,它存储用户的信用。
这个列可以加或减,我想把最小的数设为零。
例如。0-1将存储0,(不是-1)
有没有办法把这列中最小的数设为零?
UPDATE 'table' SET token = token -1 (if token is 0, it will not small than 0)发布于 2014-10-25 22:40:29
一个简单的解决方案是将alter列设置为alter,并将其类型设置为unsigned integer,默认值设置为0。
如果这是不可行的,并且可能会导致意外的问题,那么在保存数据之前,您必须适当地检查和设置值。
发布于 2014-10-25 22:41:34
因为它是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发布于 2014-10-25 22:40:14
我是从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 of token,并减去x。如果小于0,则将值设置为0。否则,使用old_token_value - x的值,它应该是正的。
https://stackoverflow.com/questions/26567939
复制相似问题