带有IF条件的MySQL INSERT和UPDATE

时间:2019-04-24 17:47:12

标签: mysql database insert-update on-duplicate-key

我有一个简单的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');

我想要做的是

  • 如果不存在相同的“ id”,则将数据插入数据库

  • 同时满足以下两个条件时更新数据:

    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)

但是最后一行不能按预期工作。

0 个答案:

没有答案