如果条件存在MySQL触发器
问题描述:
我正试图编写更新触发器,它只会在更新语句中设置新密码时更新密码,但我在试图确定语法时遇到了可怕的时间。这应该是一件容易的事,但我只是找不到解决方案。如果条件存在MySQL触发器
这里是我的代码:
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
而且我敢肯定,许多其他的组合,但它只是不工作。有没有人有任何见解?
答
如果密码字段(已经加密)在mySQL更新中发回,那么它不会为空或空白,并且MySQL将尝试重做其上的Password()函数。要检测此,请使用此代码而不是
我想你的意思是将其更新回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 ;
我认为他意味着在此触发器中实施密码加密。 – 2011-03-21 01:40:37
@yper - 我把它留了下来,但是我所攻击的部分是为了保存旧的,你实际上必须在触发器内设置* back * – RichardTheKiwi 2011-03-21 01:46:01
他可能不正确地使用'delimiter',就像他之前问题:) – 2011-03-21 01:57:59