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

问题描述 投票:0回答:1

例如:

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;

Set New.t 不起作用,where 只能选择/插入/更新/删除 stmt。 我无法更改数据库结构(可以设置默认值)。 由于“非空”约束,插入后触发器也不适合。 我找到的唯一解决方案:

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

测试数据库仅供说明之用,实际中还有更复杂的情况需要计算数据。可能有这样的“update New set New.t = now()”,或者不是?

sql sqlite
1个回答
16
投票

不,您无法更新新内容。

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

在您的情况下,最好的解决方案可能是使用 AFTER INSERT/UPDATE 触发器 WHEN NEW.t IS 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...

© www.soinside.com 2019 - 2024. All rights reserved.