MySQL触发器更新:如何检测NULL值?

时间:2019-11-19 12:47:04

标签: mysql mariadb database-trigger

当用户更新个人资料时,我尝试更新porcentageComplete配置文件:

状态字段:

`statut` enum('Marié','En couple','Divorcé') DEFAULT NULL,

触发器为:

DROP TRIGGER IF EXISTS update_user;
DELIMITER $$

CREATE TRIGGER update_user
    BEFORE UPDATE
    ON users FOR EACH ROW
BEGIN
    DECLARE porcentage int default 0;
    IF NEW.statut!=NULL OR OLD.statut!=NULL THEN 
        set porcentage = porcentage + 1;
    END IF;
    SET NEW.porcentageCompleted = porcentage;

END$$ 

这不能正确更新porcentageCompleted:看起来NULL比较无法正常工作

1 个答案:

答案 0 :(得分:2)

=<>(或!=)与NULL值的比较本身产生NULL,因此不是true,即false。使用IS NULLIS NOT NULL检查NULL

...
IF NEW.statut IS NOT NULL
    OR OLD.statut IS NOT NULL THEN 
...

值得一读:3.3.4.6 Working with NULL Values