2011-03-13 164 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