首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql在列中设置最小数目(数字不小于零)

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

Stack Overflow用户
提问于 2014-10-25 22:31:44
回答 3查看 118关注 0票数 0

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

这个列可以加或减,我想把最小的数设为零。

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

有没有办法把这列中最小的数设为零?

代码语言:javascript
复制
UPDATE 'table' SET token = token -1 (if token is 0, it will not small than 0)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-25 22:40:29

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

如果这是不可行的,并且可能会导致意外的问题,那么在保存数据之前,您必须适当地检查和设置值。

票数 2
EN

Stack Overflow用户

发布于 2014-10-25 22:41:34

因为它是MySQL,所以不能使用CHECK CONSTRAINT,但是可以使用表上的BEFORE INSERT触发器激活该约束,如下所示

代码语言:javascript
复制
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语句,如下所示

代码语言:javascript
复制
UPDATE table1 SET token = 0 where token < 0
票数 1
EN

Stack Overflow用户

发布于 2014-10-25 22:40:14

我是从this question的答案中借用的,但这里有一个大致的想法:

代码语言:javascript
复制
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的值,它应该是正的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26567939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档