MySQL INSERT и UPDATE с условием IF - PullRequest
       39

MySQL INSERT и UPDATE с условием IF

0 голосов
/ 24 апреля 2019

У меня есть простая база данных 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), это не должно обновлять запись.В данный момент обновляет описание, но не должно.

Не могли бы вы, ребята, помочь мне улучшить этот запрос?

update: я также пытаюсь:

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)

, нопоследняя строка не работает должным образом.

...