除特定列更新外,Mysql更新触发器

时间:2018-04-02 09:18:51

标签: mysql triggers

在MySQL中,我希望在除了一列更新之外的所有列上更新时触发一个触发器。

在我的表格行中,我有40列。我希望触发器在update_time字段以外的任何字段发生更新时更新列update_time

CREATE TRIGGER `UpdateDateTrigger`
BEFORE UPDATE ON `users`
FOR EACH ROW 
    IF NOT UPDATE(`update_time`) BEGIN
        SET new.update_timestamp = now()
    END

但它没有按预期工作。

2 个答案:

答案 0 :(得分:0)

我建议您不要使用触发器功能,而是建议您明智地创建表,以便在与该行关联的更改内容时自动更新update_time字段。

请查看documentation here,以便每次更新行时按时自动更新。创建语法简单有效。

CREATE TABLE t1 (
  // .... Other columns
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

如果您希望对每个列进行特定控制,那么编写触发器是我认为最好的主意。请check the answer在这里。

答案 1 :(得分:0)

通过查看MySQL automatic update for specific column instead of whole record,我得到了在触发器

中排除两列更新的解决方案
IF !((NEW.last_visited <> OLD.last_visited) || 
(NEW.update_time <> OLD.update_time)) THEN
   SET new.update_time = now();
END IF

谢谢!