OLD 値が NEW 値と等しくない場合に、audit_field に行を挿入したいと考えています。そのために、IF NEW.notes <> OLD.notes THEN
各挿入の前に追加しました。ただし、OLD値がNULLの場合、挿入は実行されないことがわかりました(と思います)。逆が真であるかどうかはテストしていません。OLD 値が何かで NEW 値が NULL の場合は挿入されませんが、挿入されないことが予想されます。
OLD 値が NEW 値と等しくなく、OLD 値が NULL であった場合 (または同様に、NEW 値が 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$$