gpt4 book ai didi

如果条件存在,MySQL 触发器

转载 作者:IT老高 更新时间:2023-10-29 00:13:36 26 4
gpt4 key购买 nike

我正在尝试编写一个更新触发器,它只会在更新语句中设置新密码时更新密码,但我在尝试确定语法时遇到了可怕的时间。这应该是显而易见的,但我只是没有找到解决方案。

这是我的代码:

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

我敢肯定还有许多其他组合,但它只是不起作用。有人有什么见解吗?

最佳答案

我认为您的意思是在未提供新密码时将其更新回 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 ;

关于如果条件存在,MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com