如何更新列在数据库中只有/当值在DB小于新值



我试图用这个查询每隔几分钟更新列"idleTime"。我想更新它,只有在DB值较小的情况下!

    INSERT INTO
          bl_statistics (id, date, idleTime) 
    VALUES
          ("", DATE_FORMAT(NOW(), "%Y-%m-%d"), "1.01234") 
    ON DUPLICATE KEY UPDATE 
          idleTime=if(VALUES(idleTime) < 1.01234, VALUES(idleTime), "1.01234");

无论如何,值总是被覆盖,是我错过了什么,还是不可能以这种方式更新值?

你的实现是非常正确的,但我认为你没有指定date列的UNIQUE约束。

要做到这一点,

ALTER TABLE bl_statistics ADD CONSTRAINT tb_uq UNIQUE(date)

并执行下面的语句

INSERT INTO bl_statistics(`id`, `date`, `idleTime`)
VALUES(NULL, '2013-05-30 00:00:00', 2)
ON DUPLICATE KEY UPDATE idleTime = IF(idleTime < 2, 2, idleTime)

这里有一个完整的工作演示链接:http://www.sqlfiddle.com/#!2/87bab/1

哦,还有一件事,不要将日期存储为字符串,而是将其存储为DATETIMEDATE

如果你试图更新的值,为什么你使用insert ?

update bl_statistics
    set idleTime = 1.01234,
        date = DATE_FORMAT(NOW(), "%Y-%m-%d")
    where idleTime < 1.01234 and id = ''

您应该能够使用UPDATE语句完成此操作。

使用您的示例,尝试这样做:

update bl_statistics
set date = current_date(),
  idleTime = greatest(idleTime,"1.01234")
where id = ""

最新更新