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
Каков правильный способ сделать это?
Ответы
Ответ 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}
будет выполнено