テーブルA
があり、列名がありますCOL_A
。
誰かが値を変更した場合、トリガーが値をからに戻すこと1
を(コストではなく)からに変更するとします。'X'
'X'
1
new
SQLiteは列値の変更をサポートしていません。トリガーの列を変更する唯一の方法はUPDATE
コマンドを実行することですが、それによってトリガーが再度実行されます。
あなたができることは、そもそも列を変更しないようにすることです。
CREATE TRIGGER IF NOT EXISTS prevent_col_a_change
BEFORE UPDATE OF col_a ON a
BEGIN
SELECT RAISE(ABORT, 'COL_A must not be changed');
END;
UPDATEトリガーは、ケースに適したソリューションです。古い値を新しい値に設定するだけで、目的の動作につながります。
例えば:
CREATE OR REPLACE TRIGGER orders_before_update
BEFORE UPDATE
ON orders
FOR EACH ROW
BEGIN
:new.CreatedAt:= :old.CreatedAt;
END;