Если вы обновите Status
, вы выполняете ОБНОВЛЕНИЕ, и все триггеры ОБНОВЛЕНИЯ сработают. Все, что вам нужно сделать, это сравнить новые и старые значения passwd
и применить ваш MD5, только если они отличаются. К счастью для вас, MySQL предоставляет OLD
и NEW
псевдонимы строк :
Вы можете ссылаться на столбцы в предметной таблице (таблица, связанная с триггером), используя псевдонимы OLD
и NEW
. OLD.col_name
относится к столбцу существующей строки перед ее обновлением или удалением. NEW.col_name
относится к столбцу новой строки для вставки или существующей строки после ее обновления. Попробуйте использовать IF
:
BEFORE UPDATE ON `ediftpdb`.`users`
FOR EACH ROW
SET NEW.passwd = IF(NEW.passwd = OLD.passwd, NEW.passwd, md5(NEW.passwd))
Это не должно измениться NEW.passwd
, если NEW.passwd
(новый пароль) и OLD.passwd
(хешированный пароль, который уже находится в базе данных) отличаются. Конечно, это может не сработать, если кому-то удастся ввести MD5 своего старого пароля в качестве нового, но это маловероятно.