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

6gpjuf90  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(140)

举例来说:

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.我不能改变数据库结构(可以设置默认值)。由于“非空”约束,插入后触发器也不适用。我找到的唯一解决办法是:

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

测试数据库仅用于说明目的,在实践中有更复杂的情况下计算数据。可能会有类似于“update New set New.t = now()"的东西,或者没有?

7xzttuei

7xzttuei1#

不,你不能更新新的。
我倾向于使用带有INSTEAD OF触发器的VIEW,正如上面评论的mu is too short
在您的情况下,最好的解决方案可能是使用AFTER UPDATE/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.

相关问题