web-dev-qa-db-ja.com

MySQLトリガーの質問:列が変更されたときにのみトリガーしますか?

これが可能かどうかはわかりませんが、テーブルにactiveという名前の列があります。アクティブな列が変更されるたびに、date列の日付をリセットしたいのですが、[〜#〜] only [〜#〜] if active列が変更されます。

他の列が変更されたがactive列は変更されなかった場合、日付は同じままになります。

19
kylex

何かのようなもの

DELIMITER //
 CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
     FOR EACH ROW
     BEGIN
     IF NEW.active <> OLD.active THEN
     SET NEW.date = '';     
     END IF;
     END
     //
32
Haim Evgi

#2の例のIFテストで問題が発生しました。値の1つがnullの場合、<>テストはnullを返します。これにより、テストが満たされず、1つの値がnullにまったく等しくなくても、トリガーのアクションは実行されません。これを修正するために、<=>(NULLセーフイコール)を使用するこのテストを思いつきました。これが誰かを助けることを願っています。

DELIMITER $$
DROP TRIGGER IF EXISTS updtrigger ;
$$
CREATE TRIGGER updtrigger  AFTER UPDATE
    ON yourTable FOR EACH ROW
BEGIN
    IF ((NEW.active <=> OLD.active) = 0)  THEN
     SET NEW.date = '';     
     END IF;
$$
15
John Glassman