我可以在sqlite中插入触发器之前更新New吗?

时间:2012-02-20 05:52:30

标签: sql sqlite

例如:

create table test (id numeric, t date not null);

create trigger test_in
before insert on test
for each row
when New.t is null
begin
 -- set New.t = now();
end;

设置New.t不起作用,where can be only select/insert/update/delete stmt. 我无法更改数据库结构(可以设置默认值)。 插入触发器后也因为“not null”约束而不适合。 我找到的唯一解决方案:

insert into test values (New.id, now());
select raise(ignore);

测试数据库仅用于说明目的,实际上存在计算数据的更复杂情况。可能有这样的“更新New set New.t = now()”,或者没有?

1 个答案:

答案 0 :(得分:9)

不,您无法更新新内容。

我倾向于使用带有INSTEAD OF触发器的VIEW,因为mu是短评论。

在您的情况下,最佳解决方案可能是使用AFTER INSERT / UPDATE触发器,当NEW.t为NULL时,在受影响的行中更新t:

CREATE TRIGGER test_in
AFTER INSERT ON test
FOR EACH ROW
WHEN (NEW.t IS NULL)
BEGIN
   UPDATE test SET t = now() WHERE id = NEW.id;
END;

仅供参考,您的id列可能应该被声明为INTEGER PRIMARY KEY ......

相关问题