2012-01-05 8 views
1

"古い"ブール列を持つテーブルがあります。それはいつものように始まります。次に、ユーザーが取ることができる(行の中のデータをキャッシュにプッシュする)アクションが1つあります。このアクションでは、古い値をfalseに設定する必要があります。MySQLのテーブルに自動 "古い"列を追加する方法

ただし、行が更新されると、失効した値は自動的に再びtrueに設定されます。私は、トリガーで、この作品を作ってみた:

DROP TRIGGER IF EXISTS `update_tbl_stale` 

CREATE TRIGGER `update_tbl_stale` BEFORE UPDATE ON `tbl` 
FOR EACH ROW BEGIN 
    SET NEW.stale = 1; 
END 

ここでの問題は、それが自動的に1にセットされますので、私は0に古い設定されていないということですif書Iのいくつかの並べ替えがあります更新ステートメントが明示的にstaleを0に設定していない場合にのみ、そのトリガーに何かをさせることができますか?それともコードで扱わなければならないことですか?用として

+0

あなたは「ENUM」データ型を使用しないでください – diEcho

答えて

1

あなたはトリガーを明示的に以前にされた後に0に設定されている場合を探すために必要な私には思えます1であり、この場合はゼロにしてください:

CREATE TRIGGER `update_tbl_stale` BEFORE UPDATE ON `tbl` 
FOR EACH ROW BEGIN 
    SET NEW.stale = IF(NEW.Stale=0 AND OLD.Stale=1,0,1); 
END 
関連する問題