2011-03-13 160 views
0

我有两列的表:名称(文本)和计数(整数)删除行与更新触发器

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

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

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

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

在此先感谢。

+0

您好,我一直在试图复制你的问题,但没有运气,你确定没有其他事情你的其他触发器导致问题的应用程序? – aweis

回答

1

一个可能的解决方案可能会限制删除行更新。我假设名称列是唯一的(或主键)。下面的触发器只检查已更新了该行的数列:

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 
+0

嗨,谢谢你的回答。你是对的。我错误地发布了一个简化的问题,而没有检查问题是否可重现。非常遗憾。事实证明,原来的问题从第二个表的触发器(插入)增加计数器。所以每当我向该表添加一些行时,计数器就会增加。从我看到的情况来看,这会导致某种奇怪的行为。 – Dan

+0

如果您仍然有问题,请尝试更新示例,然后我会查看它! – aweis