Mysql 如何使用不同的位置对更新进行单个查询?

Mysql 如何使用不同的位置对更新进行单个查询?,mysql,Mysql,我想用这个语句进行一次查询,但我不知道如何进行 UPDATE alarm SET alarm1 = 1 , alarm1time = NOW() WHERE alarm1 != 1 AND id = 1; UPDATE alarm SET alarm2 = 1 , alarm2time = NOW() WHERE alarm2 != 1 AND id = 1; UPDATE alarm SET alarm3 = 1 , alarm3time = NOW() WHERE alarm3 != 1 A

我想用这个语句进行一次查询,但我不知道如何进行

UPDATE alarm SET alarm1 = 1 , alarm1time = NOW() WHERE alarm1 != 1 AND id = 1;
UPDATE alarm SET alarm2 = 1 , alarm2time = NOW() WHERE alarm2 != 1 AND id = 1;
UPDATE alarm SET alarm3 = 1 , alarm3time = NOW() WHERE alarm3 != 1 AND id = 1;
UPDATE alarm SET alarm4 = 1 , alarm4time = NOW() WHERE alarm4 != 1 AND id = 1;
``

您可以使用
大小写
表达式:

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;
更新报警
设置
alarm1=当alarm1 1时的情况,然后1 ELSE alarm1结束,
alarm1time=当alarm1 1然后立即()时的情况,否则alarm1time结束,
alarm2=当alarm2 1和1 ELSE alarm2结束时的情况,
alarm2time=当alarm2 1然后立即()否则alarm2time结束时,
alarm3=当alarm3 1然后1 ELSE alarm3结束时的情况,
alarm3time=当alarm3 1 THEN NOW()时的情况,否则alarm3time结束,
alarm4=当alarm4 1然后1 ELSE alarm4结束时的情况,
alarm4time=报警4时的情况1然后立即()否则alarm4time结束
其中id=1;
这将通过一条update语句完成任务。话虽如此,我不喜欢我写的东西,实际上我更喜欢你使用几种不同的更新语句的版本,因为它简洁易读。如果您希望以原子方式运行4个更新,那么可以从单个显式事务执行

WHERE id = 1 AND ( alarm1 != 1 OR alarm2 != 1 OR ... )
应该没问题,但是每个数据库使用不同的语法,所以
()
可能会有问题