我有一个包含两列的表:name(text)和count(integer)
如果表中不存在新名称(count = 1),则会在表中插入新名称,否则计数器会递增。我有一个类似的功能,而不是递减计数器。我想要实现的是,一旦此计数器达到0,它就会删除该行。我想过使用触发器:
CREATE TRIGGER fooTrigger
AFTER UPDATE OF count ON foo
BEGIN
DELETE FROM foo WHERE count=0;
END;
问题是由于某种原因,当这样做时,触发器似乎删除了每一行。
关于可能出现什么问题的任何提示?我怀疑问题可能与在桌子上使用触发器有关,但我当然不知道..
提前致谢。
答案 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