我想将记录标记为已删除而不是实际删除记录。 我的意图是使用而不是触发器,但我得到一个SQLException,我和谷歌都不知道如何解决这个问题。
我的代码:
CREATE TRIGGER IF NOT EXISTS <Trigger>
INSTEAD OF DELETE ON <Table>
FOR EACH ROW
BEGIN
UPDATE <Table>
SET Status = 'D'
WHERE ID = old.ID;
END
我的错误:
java.sql.SQLException: cannot create INSTEAD OF trigger on table: main.<Table>
at org.sqlite.NativeDB.throwex(NativeDB.java:210)
at org.sqlite.NativeDB._exec(Native Method)
at org.sqlite.Stmt.executeUpdate(Stmt.java:152)
请帮助我?
修改 我真正想要的是激活外键实施。
请参阅此处:How do you enforce foreign key constraints in SQLite through Java?
答案 0 :(得分:2)
您不能在表上使用INSTEAD OF
触发器,并且RAISE
在BEFORE
/ AFTER
触发器中发生错误时,触发器中执行的所有更新也将被滚动回来。
您可以重命名您的表格,为该表格创建一个视图,并创建大量INSTEAD OF
触发器来实施所有INSERT
/ UPDATE
/ DELETE
操作。< / p>
但是,当您想要标记某些记录时,将程序更改为仅执行UPDATE
会更容易。
答案 1 :(得分:1)
而不是触发器旨在与视图一起使用,以便您可以指定在插入时应执行操作的基础表,更新我们的删除是在视图本身上发布的。
您可以尝试的一件事是在删除触发器之前执行,然后引发异常。唯一的问题是我不确定这是否也会干扰更新。也许值得一试:
SELECT RAISE(ABORT, 'Prevent delete');