我试图用这个查询每隔几分钟更新列"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
哦,还有一件事,不要将日期存储为字符串,而是将其存储为DATETIME
或DATE
。
如果你试图更新的值,为什么你使用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 = ""