【问题标题】:Detecting if OLD value is not equal to NEW value and OLD value was NULL检测 OLD 值是否不等于 NEW 值且 OLD 值是否为 NULL
【发布时间】:2013-04-10 14:11:40
【问题描述】:

当 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$$

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    使用&lt;=&gt;

    SELECT NOT 1 <=> 1,NOT NULL <=> NULL, NOT 1 <=> NULL, NOT 1 <=> 2, 1 <> 1, NULL <> NULL, 1 <> NULL, 1 <>2;
    
    +-------------+-------------------+----------------+-------------+--------+--------------+-----------+-------+
    | NOT 1 <=> 1 | NOT NULL <=> NULL | NOT 1 <=> NULL | NOT 1 <=> 2 | 1 <> 1 | NULL <> NULL | 1 <> NULL | 1 <>2 |
    +-------------+-------------------+----------------+-------------+--------+--------------+-----------+-------+
    |           0 |                 0 |              1 |           1 |      0 | NULL         | NULL      |     1 |
    +-------------+-------------------+----------------+-------------+--------+--------------+-----------+-------+
    

    附言。抱歉,在发布问题之前应该阅读手册,但希望它对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-06
      • 2021-01-08
      • 2013-05-27
      • 2012-10-19
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多