我正在尝试使用此查询每隔几分钟更新一次“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");
无论如何,价值总是被覆盖,我是否遗漏了某些内容,或者无法以这种方式更新价值?
答案 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
哦,还有一件事,不要将日期存储为字符串,而是将其存储为DATETIME
或DATE
。
答案 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 = ""