Mysql 关于使用条件更新触发器的问题

Mysql 关于使用条件更新触发器的问题,mysql,Mysql,我找不到我试图编写的触发器的正确语法 我想在每次表上有更新时更新时间戳,但仅针对特定行。我只想更新最后N个环节的更新时间 我找不到如何将SET与where子句一起使用 CREATE TRIGGER "time_on_update" BEFORE UPDATE ON "SAVE_UPDATE" FOR EACH ROW BEGIN IF (NEW.DATE_DE_RDV <> OLD.DATE_DE_RDV) OR (NEW.ADRESSE <> OLD.ADRESSE)

我找不到我试图编写的触发器的正确语法

我想在每次表上有更新时更新时间戳,但仅针对特定行。我只想更新最后N个环节的更新时间

我找不到如何将SET与where子句一起使用

CREATE TRIGGER "time_on_update"
BEFORE UPDATE ON "SAVE_UPDATE"
FOR EACH ROW
BEGIN
IF
(NEW.DATE_DE_RDV <> OLD.DATE_DE_RDV)
OR
(NEW.ADRESSE <> OLD.ADRESSE)
OR
(NEW.CODE_POSTAL <> OLD.CODE_POSTAL)
OR
(NEW.VILLE <> OLD.VILLE)
THEN        
SET (NEW.UPDATE_TIME = current_timestamp WHERE N_TACHE= (SELECT MAX(N_TACHE));
END IF;
如果你有什么建议,我接受

提前谢谢

编辑:

这一个正在工作,但它更新了所有行,我只想在RDV、ADRESE、CODE_POSTAL或VILE更新时更新N_TACHE的最后一个值的update_time

    DELIMITER $$
    CREATE TRIGGER `time_on_update`
    BEFORE UPDATE ON `SAVE_UPDATE`
    FOR EACH ROW
    BEGIN

    IF
    (SELECT MAX(N_TACHE)
    FROM SAVE_UPDATE
    WHERE
    ((NEW.DATE_DE_RDV <> OLD.DATE_DE_RDV)
    OR
    (NEW.ADRESSE <> OLD.ADRESSE)
    OR
    (NEW.CODE_POSTAL <> OLD.CODE_POSTAL)
    OR
    (NEW.VILLE <> OLD.VILLE)))
    THEN        
    SET NEW.UPDATE_TIME = current_timestamp;
    END IF;
    END
    $$
    DELIMITER ;

您必须扩展n_tache是什么以及它来自何处。SET NEW.UPDATE_TIME=从SAVE_UPDATE中选择当前时间戳,其中n_tache=选择MAXN_tache;我试过了,但是语法错了。当我只想在某些条件下更新行时,我不知道如何处理SET。我尝试使用update'table_name'的CASE,但当我这样做时,我收到此错误消息,无法运行语句:无法更新存储函数/触发器中的表“SAVE\u update”,因为它已被从SAVE\u update调用此存储函数/触发器选择N\u链接的语句使用,其中N\u链接=选择MAXN\u链接;如果NEW.DATE_DE_RDV OLD.DATE_DE_RDV或NEW.adrese OLD.adrese或NEW.CODE_posal OLD.CODE_posal或NEW.VILLE OLD.VILLE,则设置NEW.UPDATE_TIME=当前_时间戳;如果结束;