dan*_*dan 6 mysql null triggers 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$$
Run Code Online (Sandbox Code Playgroud)
nig*_*der 16
MySql有一个特殊的null-safe等号检查操作符:
<=>
NULL安全相等.此运算符执行与=运算符类似的相等比较,但如果两个操作数均为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL.
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
Run Code Online (Sandbox Code Playgroud)
您可以将此运算符与NOT运算符一起使用:
mysql> SELECT NOT (1 <=> 1), NOT (NULL <=> NULL), NOT (1 <=> NULL);
-> 0, 0, 1
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下你应该写:
IF NOT (OLD.assignedto <=> NEW.assignedto)
Run Code Online (Sandbox Code Playgroud)
尝试:
IF ( (OLD.assignedto IS NOT NULL AND NEW.assignedto IS NOT NULL
AND OLD.assignedto != NEW.assignedto)
OR (OLD.assignedto IS NULL AND NEW.assignedto IS NOT NULL)
OR (OLD.assignedto IS NOT NULL AND NEW.assignedto IS NULL)
)
Run Code Online (Sandbox Code Playgroud)
评论非常正确。
| 归档时间: |
|
| 查看次数: |
7452 次 |
| 最近记录: |