gpt4 book ai didi

mysql - 检测旧值是否不等于新值且旧值是否为 NULL

转载 作者:行者123 更新时间:2023-11-29 01:42:38 25 4
gpt4 key购买 nike

当旧值不等于新值时,我想在 audit_field 中插入一行。为此,我添加了 IF NEW.notes <> OLD.notes THEN在每个插入之前。但是,我发现(我认为)如果 OLD 值为 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$$

最佳答案

使用 <=>

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 |
+-------------+-------------------+----------------+-------------+--------+--------------+-----------+-------+

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

关于mysql - 检测旧值是否不等于新值且旧值是否为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com