我有表A
,并且有一个列名COL_A
。
我希望如果有人更改值,让我们说 from 1
to 'X'
(不是常数)触发器会将其从'X'
to更改回1
。
SQLite 不支持更改new
列值。更改触发器中的列的唯一方法是运行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;