0
我想行插入audit_field当旧值不等于新值。为此,我在每个插入前添加了IF NEW.notes <> OLD.notes THEN
。然而,我发现(我认为),如果OLD值为NULL,则不执行插入操作。我还没有测试过相反是否为真,并且如果OLD值是NEW和NEW值是NULL,它就不会插入,但我预计它不会。检测,如果旧值不等于新值和旧值是NULL
如何检测如果旧值不等于新值和旧值是NULL(或者类似地,如果新值是NULL)?
CREATE TRIGGER tg_students_upd AFTER UPDATE ON students
FOR EACH ROW
BEGIN
IF NEW.name <> OLD.name OR NEW.ssn <> OLD.ssn OR NEW.notes <> OLD.notes THEN
INSERT INTO audits(tableName,pk,task,dateChanged,users_id,dbUser,requesting_ip) VALUES ('students', @AID, 'u', NOW(), @users_id, USER(), @requesting_ip);
SET @AID=LAST_INSERT_ID();
IF NEW.name <> OLD.name THEN
INSERT INTO audit_field(audits_id,columnName,oldValue,newValue) VALUES (@AID,'name',OLD.name,NEW.name);
END IF;
IF NEW.ssn <> OLD.ssn THEN
INSERT INTO audit_field(audits_id,columnName,oldValue,newValue) VALUES (@AID,'ssn',OLD.ssn,NEW.ssn);
END IF;
IF NEW.notes <> OLD.notes THEN
INSERT INTO audit_field(audits_id,columnName,oldValue,newValue) VALUES (@AID,'notes',OLD.notes,NEW.notes);
END IF;
END IF;
END$$