使用更新触发器删除行

时间:2011-03-13 22:11:29

标签: sqlite triggers

我有一个包含两列的表:name(text)和count(integer)

如果表中不存在新名称(count = 1),则会在表中插入新名称,否则计数器会递增。我有一个类似的功能,而不是递减计数器。我想要实现的是,一旦此计数器达到0,它就会删除该行。我想过使用触发器:

CREATE TRIGGER fooTrigger
AFTER UPDATE OF count ON foo
BEGIN
  DELETE FROM foo WHERE count=0;
END;

问题是由于某种原因,当这样做时,触发器似乎删除了每一行。

关于可能出现什么问题的任何提示?我怀疑问题可能与在桌子上使用触发器有关,但我当然不知道..

提前致谢。

1 个答案:

答案 0 :(得分:1)

可能的解决方案可能是将删除限制为更新的行。我假设name列是唯一的(或主键)。以下触发器仅检查已更新行的计数列:

create trigger fooTrigger
after update of count on foo
for each row when new.count = 0 begin
    delete from foo where name = new.name;
end

修改

如果您的名称列不是唯一的,您可以将删除限制为实际的rowid(此语法仅限于sqlit)这意味着如果您有两行名为'hello world'且两个不同的计数,则删除将只影响首先击中0的行!但我仍然认为名称列是唯一的,以便进行良好的设计实践:)

create trigger fooTrigger
after update of count on foo
for each row when new.count = 0 begin
    delete from foo where rowid = new.rowid;
end