当前位置: 首页 > 面试题库 >

检测OLD值是否不等于NEW值并且OLD值为NULL

南门星河
2023-03-14
问题内容

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

问题答案:

使用 <=>

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

PS。抱歉,在发布问题之前应该已经阅读了手册,但希望对您有所帮助。



 类似资料:
  • QuickSQL 可用来连接到各种数据源并提供快速简单的数据库访问。

  • 我有一个文本框,这是一个可选的字段,供用户输入数字。如果有一个数字在那里,我想检查,以确保它小于500,然后用它做一些事情。 以下是我目前正在做的事情:

  • 问题内容: 有没有一种方法可以检测MySQL查询中的值是否为数字?如 问题答案: 在大多数情况下,这应该可行。 它不适用于非标准数字,例如 (十进制)

  • 使用 === 操作符来检测 null 和布尔 false 值。 PHP 宽松的类型系统提供了许多不同的方法来检测一个变量的值。 然而这也造成了很多问题。 使用 == 来检测一个值是否为 null 或 false,如果该值实际上是一个空字符串或 0,也会误报为 false。 isset 是检测一个变量是否有值, 而不是检测该值是否为 null 或 false,因此在这里使用是不恰当的。 is_nul

  • 我在一个VueJS实例中有两个数组。这些阵列显示学生可以在学校参加的课程。首先是用户参加的课程,其次是有学生参加的所有课程。 数组看起来像这样: 这两个数组都由从用户输入填充的数据组成,因此它们会随时间而变化。第一个数组是用户特定的内容(用户参加的课程),第二个数组是有人参加的所有课程的数组。 我想检查与用户参加相同课程的人数。在这种情况下,我想检查数组myCourses(课程a和b)中有多少在数

  • 问题内容: 如何检查datetime64是否为NaT?我似乎无法从文档中挖掘任何东西。我知道Pandas可以做到,但我不想对如此基本的东西添加依赖。 问题答案: 简介: 这个答案是在Numpy版本为1.11的时候写的,而NAT比较的行为应该从版本1.12开始改变。显然不是这种情况,答案的第二部分就错了。答案的第一部分可能不适用于新版本的numpy。确保已检查以下MSeifert的答案。 第一次进行