怎么写而不是更新? - 触发器

时间:2012-10-21 08:34:42

标签: sql sqlite

我有表A,并且列名为COL_A

我希望如果有人更改了该值,请从1'X'(非常数)说明触发​​器会将其从'X'更改为1

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:-1)

UPDATE触发器是一个很好的解决方案。只需将旧值设置为新值,即可获得所需的行为。

例如:

CREATE OR REPLACE TRIGGER orders_before_update
BEFORE UPDATE
  ON orders
  FOR EACH ROW
BEGIN
  :new.CreatedAt:= :old.CreatedAt;
END;