mysql - 将 Null 与 MySQL 触发器中的另一个值进行比较

标签 mysql triggers null compare

所以这是我的问题,我在更新表格行时比较新旧值。但是新值或旧值有时会为空。所以下面的代码不起作用。我可以解决这个问题吗?

谢谢

BEFORE UPDATE ON mytable
   FOR EACH ROW
BEGIN
        IF OLD.assignedto != NEW.assignedto
        THEN
                INSERT INTO history
                    (
                        asset    ,
                        changedfield     ,
                        oldvalue    ,
                        newvalue      
                    )
                    VALUES
                    (
                        NEW.asset,
                        'assignedto',
                        OLD.assignedto,
                        NEW.assignedto
                    );
        END IF;
    END$$

最佳答案

MySql 有一个特殊的空安全相等检查运算符:

<=>

NULL-safe equal. This operator performs an equality comparison like the = operator, but returns 1 rather than NULL if both operands are NULL, and 0 rather than NULL if one operand is NULL.

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL

您可以将此运算符与 NOT 运算符一起使用:

mysql> SELECT NOT (1 <=> 1), NOT (NULL <=> NULL), NOT (1 <=> NULL);
        -> 0, 0, 1

所以,在你的情况下你应该写:

IF NOT (OLD.assignedto <=> NEW.assignedto)

关于mysql - 将 Null 与 MySQL 触发器中的另一个值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999295/

相关文章:

mongodb - mongodb是否具有关系型数据库中的trigger、procedure等属性?

sql - SQL Server 中一个触发器会激活另一个触发器吗?

Java 数组销毁

mysql - 如何从症状中找到疾病的最佳匹配?

mysql - 如何找到SAS中分组数据中第一个观察值的滞后

mysql - 触发器错误(mysql)

Objective-C 属性 Getter/Setter 崩溃 EXC_BAD_ACCESS

Java 字符串 : difference between null and empty

mysql - 对于一个引擎为InnoDB的表,最坏情况下会锁定多少行?

mysql - 我想将一个表的特定数据迁移到 MySql 中另一个数据库中的另一个特定列