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