我有一个简单的MySQL数据库,例如:
CREATE TABLE `tab_update` (
`id` int(11) NOT NULL,
`number` int(11) NOT NULL,
`description` varchar(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
和其中的一些数据:
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('111', '5', 'first value');
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('222', '5', 'first value');
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('333', '5', 'first value');
我想要做的是
或
同时满足以下两个条件时更新数据:
a)'id'已经在数据库中
b)新数字值大于已存储的数字
我现在想做的是:
INSERT INTO tab_update (id, number, description) VALUES (333, 1, 'second value')
ON DUPLICATE KEY UPDATE number = GREATEST(number, VALUES(number)), description = 'second value'
这部分起作用-插入数据或更新,但是,我的行为有误。如果我们有“数字= 1”(小于5),则不应更新记录。 目前不断更新说明,但不应更新。
可以请大家帮我改进此查询吗?
更新: 我也在尝试:
INSERT INTO tab_update (id, number, description) VALUES (333, 6, 'second value')
ON DUPLICATE KEY UPDATE
number = GREATEST(number, VALUES(number)),
description = IF(VALUES(number) > number, VALUES(description), description)
但是最后一行不能按预期工作。