Вы можете использовать выражение CASE
:
UPDATE alarm
SET
alarm1 = CASE WHEN alarm1 <> 1 THEN 1 ELSE alarm1 END,
alarm1time = CASE WHEN alarm1 <> 1 THEN NOW() ELSE alarm1time END,
alarm2 = CASE WHEN alarm2 <> 1 AND THEN 1 ELSE alarm2 END,
alarm2time = CASE WHEN alarm2 <> 1 THEN NOW() ELSE alarm2time END,
alarm3 = CASE WHEN alarm3 <> 1 THEN 1 ELSE alarm3 END,
alarm3time = CASE WHEN alarm3 <> 1 THEN NOW() ELSE alarm3time END,
alarm4 = CASE WHEN alarm4 <> 1 THEN 1 ELSE alarm4 END,
alarm4time = CASE WHEN alarm4 <> 1 THEN NOW() ELSE alarm4time END
WHERE id = 1;
Это выполнит работу с одним оператором обновления. При этом мне не нравится то, что я написал, и я на самом деле предпочитаю, чтобы ваша версия использовала несколько различных операторов обновления, потому что она чистая и ее легче читать. Если вы хотите запустить 4 обновления атомарно, сделайте это из одной явной транзакции.