我在一个只有4列的表上创建了一个更新后触发器。所以,我在触发器中应用了以下条件-
IF (NEW.courseStartDate <> OLD.courseStartDate )
THEN
INSERT INTO tp_courses_audit (`row_id`, `orgId`, `field_name`, `old_value`
, `new_value`, `created` )
VALUES (OLD.id, OLD.orgId, 'courseStartDate',OLD.courseStartDate,NEW.courseStartDate,NOW());
END IF;
IF (NEW.courseEndDate <> OLD.courseEndDate)
THEN
INSERT INTO tp_courses_audit (`row_id`, `orgId`, `field_name`, `old_value`
, `new_value`, `created` )
VALUES (OLD.id, OLD.orgId, 'courseEndDate',OLD.courseEndDate,NEW.courseEndDate,NOW());
END IF;
IF (NEW.course_id <> OLD.course_id)
THEN
INSERT INTO tp_courses_audit (`row_id`, `orgId`, `field_name`, `old_value`
, `new_value`, `created` )
VALUES (OLD.id, OLD.orgId, 'course_id',OLD.course_id,NEW.course_id,NOW());
END IF;
IF (NEW.status <> OLD.status)
THEN
INSERT INTO tp_courses_audit (`row_id`, `orgId`, `field_name`, `old_value`
, `new_value`, `created` )
VALUES (OLD.id, OLD.orgId, 'status',OLD.status,NEW.status,NOW());
END IF;
触发器工作正常,我正在获取审计表中的数据。
我只是想知道,肯定应该有一个更好的方法来识别哪些字段/字段在上次更新中被修改,因为如果我们在主表中有大量的列,那么多个if条件不会是处理这个问题的更好方法。
我怎样才能更好地处理它?
1条答案
按热度按时间abithluo1#
扳机工作正常
否。如果旧值或新值为NULL,则不会记录更改。
你必须使用NULL-safe等于运算符:
此外,您还可以将
created
列定义为DEFAULT CURRENT_TIMESTAMP
,并将其从DEFAULT CURRENT_TIMESTAMP
中删除。