Подтвердить что ты не робот

MySQL: обновлять поле только при условии выполнения

Возможно ли выполнить запрос UPDATE в MySQL, который обновляет значение поля только в случае выполнения определенного условия? Что-то вроде этого:

UPDATE test
SET
    CASE
        WHEN true
        THEN field = 1
    END
WHERE id = 123

Другими словами:

UPDATE test
SET
    something = 1,        /*field that always gets updated*/
    CASE
        WHEN true
        THEN field = 1    /*field that should only get updated when condition is met*/
    END
WHERE id = 123

Каков правильный способ сделать это?

4b9b3361

Ответ 1

Да!

Здесь у вас есть другой пример:

UPDATE prices
SET final_price= CASE
   WHEN currency=1 THEN 0.81*final_price
   ELSE final_price
END

Это работает, потому что MySQL не обновляет строку, если нет изменений, как указано в документах:

Если вы установите столбец в значение, которое оно имеет в настоящее время, MySQL замечает это и не обновляет его.

Ответ 2

Попробуйте следующее:

UPDATE test
SET
   field = 1
WHERE id = 123 and condition

Ответ 3

Другим решением, которое, на мой взгляд, легче читать, будет:

UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123

Что это значит, устанавливается 'field' в 1 (например, OP, используемый в качестве примера), если условие выполнено и использует текущее значение 'field', если не выполнено. Использование предыдущего значения такое же, как и не меняется, поэтому вы идете.

Ответ 4

Другая вариация:

UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123

Это обновит field с помощью {new value}, только если {condition} будет выполнено