我有这个触发器:
delimiter $$
create trigger tr
after update on t1
for each row
begin
if new.col1 !=old.col1
then update t2 set col2 =1 where t2.col3=t1.col3;
end if;
end
$$
此触发器在col1
' 的值从 0 更改为 1 时起作用,但当其从 null 更改为 1 时,触发器不会对t2
.
我只是想知道为什么会这样。我知道 null 是不同的,但我只是在比较值。
我已经解决了我的问题new.col1 =1
。
将 if 条件更改为:
那应该可以解决您的问题。原始代码无法正常工作,因为您无法测试
NULL
值是否相等 - 您必须使用IS NULL
orIS NOT NULL
。MySQL 也有一个“null-safe equals”操作符:
<=>
这里可以使用它来使上述条件更简单(并且仍然等价):解释:
<=>是一个空安全运算符,来自 MySQL 手册:
col1
但请注意,当' 的值从 1 变为时,此触发器也会触发NULL
,不知道这是否是您想要的。如果你不想要这种行为,你可以用这种方式重写条件:
这使得不等式区分大小写
使用 ifnull 进行检查和比较。以下是假设您不会将“xxxxxx”作为真实数据的示例。