mysql触发器对null值的处理

一时失言乱红尘 2024-04-20 09:32 129阅读 0赞

问题

表demo中有字段name且表中有若干数据,触发器trgger_update_demo对表demo的触发策略是AFTER UPDATE,如果name有变化,就把老的数据插入到另一张表中。更改表demo中的name字段,触发器trgger_update_demo会有对应操作。现在执行如下操作:

  1. update demo set name='Tom' where name is null;
  2. update demo set name=null where name='Green';

发现触发器并没有做出对应操作。

触发器中对name的监控如下:

  1. SET @new_name=NEW.name;
  2. SET @old_name=OLD.name;
  3. IF
  4. @new_name!=@old_name
  5. THEN
  6. insert into demo_trgger (new_name,old_name)values(@new_name,@old_name);
  7. END IF;

原因

@new_name!=@old_name并不能对null值进行监控。

解决办法

  1. SET @new_name=NEW.name;
  2. SET @old_name=OLD.name;
  3. IF
  4. @new_name!=@old_name
  5. OR
  6. (@new_name IS NULL AND @old_name IS NOT NULL) OR ( @new_name IS NOT NULL AND @old_name IS NULL)
  7. THEN
  8. insert into demo_trgger (new_name,old_name)values(@new_name,@old_name);
  9. END IF;

发表评论

表情:
评论列表 (有 0 条评论,129人围观)

还没有评论,来说两句吧...

相关阅读