1

我有表A,并且有一个列名COL_A

我希望如果有人更改值,让我们说 from 1to 'X'(不是常数)触发器会将其从'X'to更改回1

4

2 回答 2

0

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;
于 2012-10-21T10:24:34.273 回答
-1

UPDATE 触发器是您的案例的一个很好的解决方案。只需将旧值设置为新值,这将导致您想要的行为。

例如:

CREATE OR REPLACE TRIGGER orders_before_update
BEFORE UPDATE
  ON orders
  FOR EACH ROW
BEGIN
  :new.CreatedAt:= :old.CreatedAt;
END;
于 2012-10-21T09:21:09.327 回答