如果条件存在,则触发MySQL

时间:2011-03-21 01:10:24

标签: mysql triggers

我正在尝试编写一个更新触发器,它只会在更新语句中设置新密码时更新密码,但我正在努力确定语法。这应该是不费脑子的,但我只是找不到解决方案。

这是我的代码:

CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
FOR EACH ROW BEGIN
  IF (NEW.password <> '') THEN
        SET NEW.password = PASSWORD(NEW.password);
  END IF;
END;

我试过了:

IF (NEW.password <> NULL) THEN

IF (NEW.password) THEN

IF NEW.password <> NULL THEN

IF (NEW.password > 0) THEN

IF (NEW.password != NULL) THEN

我确信其他许多组合但它只是不起作用。有没有人有任何见解?

2 个答案:

答案 0 :(得分:35)

我认为您的意思是在未提供新密码时将其更新回OLD密码。

DROP TRIGGER IF EXISTS upd_user;

DELIMITER $$

    CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
    FOR EACH ROW BEGIN
      IF (NEW.password IS NULL OR NEW.password = '') THEN
            SET NEW.password = OLD.password;
      ELSE
            SET NEW.password = Password(NEW.Password);
      END IF;
    END$$

DELIMITER ;

但是,这意味着用户永远不会删除密码。

<小时/> 如果密码字段(已加密)在更新中发送回mySQL,则它将不为空或空白,并且MySQL将尝试重做其上的Password()函数。要检测到这一点,请使用此代码

DELIMITER $$

    CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
    FOR EACH ROW BEGIN
      IF (NEW.password IS NULL OR NEW.password = '' OR NEW.password = OLD.password) THEN
            SET NEW.password = OLD.password;
      ELSE
            SET NEW.password = Password(NEW.Password);
      END IF;
    END$$

DELIMITER ;

答案 1 :(得分:0)

尝试做...

 DELIMITER $$
        CREATE TRIGGER aumentarsalario 
        BEFORE INSERT 
        ON empregados
        FOR EACH ROW
        BEGIN
          if (NEW.SALARIO < 900) THEN 
             set NEW.SALARIO = NEW.SALARIO + (NEW.SALARIO * 0.1);
          END IF;
        END $$
  DELIMITER