これが可能かどうかはわかりませんが、テーブルにactive
という名前の列があります。アクティブな列が変更されるたびに、date
列の日付をリセットしたいのですが、[〜#〜] only [〜#〜] if active
列が変更されます。
他の列が変更されたがactive
列は変更されなかった場合、日付は同じままになります。
何かのようなもの
DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF NEW.active <> OLD.active THEN
SET NEW.date = '';
END IF;
END
//
#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;
$$