【问题标题】:Replace DELETE for UPDATE with a trigger on SQLite用 SQLite 上的触发器替换 DELETE for UPDATE
【发布时间】:2026-02-05 22:45:01
【问题描述】:

SQLite 是否可以在触发器中进行更新而不是删除? 即,我得到了这两个表:

CREATE TABLE author (authorid INTEGER PRIMARY KEY, temporal NUMERIC);
CREATE TABLE comment (id INTEGER PRIMARY KEY, text TEXT, authorid INTEGER, FOREIGN KEY(authorid) REFERENCES author(authorid));

当尝试删除作者并且有任何评论引用该作者时,我想更新“临时”字段并中止删除。

我已经用触发器测试了不同的方法,但我还没有找到一种方法来做这两件事,进行更新和中止删除。我可以中止删除(尽管在这种情况下它不是必需的,因为它是由外键约束强制执行的)或进行更新(尽管删除会删除记录,因此更新无效)

【问题讨论】:

  • 看看而不是触发器。
  • 我看过它们,但它们只能应用于视图,不能应用于表格。

标签: sqlite triggers


【解决方案1】:

只有使用RAISE 生成错误才能中止删除,但这会导致任何UPDATE 被回滚。

您可以创建author 一个视图并创建多个INSTEAD OF 触发器,这些触发器将大多数操作传递到基表。 但是,在您的应用程序中处理 temporal 逻辑会容易得多。

【讨论】: