如何更新数据库中的列ONLY / WHEN中的值小于NEW值

时间:2013-05-30 01:18:35

标签: mysql sql

我正在尝试使用此查询每隔几分钟更新一次“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");

无论如何,价值总是被覆盖,我是否遗漏了某些内容,或者无法以这种方式更新价值?

3 个答案:

答案 0 :(得分:3)

您的实施非常正确,但我认为您尚未在列UNIQUE上指定date约束。

要做到这一点,

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

答案 1 :(得分:1)

如果您尝试更新值,为什么使用insert

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

答案 2 :(得分:0)

您应该可以使用UPDATE声明执行此操作。

使用您的示例,尝试以下内容:

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