2011-02-14 37 views
1

我有一個郵件隊列表和一個電子郵件黑名單表。插入到郵件隊列表中的數據是通過代碼遍歷的(字面意思是我算)。我的任務是阻止電子郵件給黑名單上的人。如果地址在黑名單表中,我可以在郵件隊列表上拒絕插入嗎?可以使用mysql觸發器來阻止插入嗎?

是否有更好的方法呢?

+0

[觸發引起的INSERT失敗的可能重複?可能?](http://stackoverflow.com/questions/229765/triggers-that-c​​ause-inserts-to-fail-possible) – 2011-02-14 18:35:41

+0

檢查上面的'可能dupe'評論中的鏈接。它正是你所需要的 - 一個「在插入之前」的數據庫,導致插入失敗。 – 2011-02-14 18:36:49

回答

3

從書 'High Performance MySQL Second Edition':

有時候,你甚至可以工作 FOR EACH ROW限制左右。 Roland Bouman 發現ROW_COUNT()總是在觸發器內報告 1,除了BEFORE觸發器的第一行 。您可以使用 來防止觸發器的代碼 針對受影響的每個行執行 ,並且每個語句只運行一次。 它與每個語句 的觸發器不同,但它是一種有用的技術 ,用於在某些情況下模擬每個語句的BEFORE 觸發器。此行爲 實際上可能是一個將在某個時間點修復 的錯誤,因此您應該小心使用 ,並驗證在升級服務器時仍然可以使用 。 這裏有一個如何使用這個 黑客樣本:

CREATE TRIGGER fake_statement_trigger 
BEFORE INSERT ON sometable 
FOR EACH ROW 
BEGIN 
DECLARE v_row_count INT DEFAULT ROW_COUNT(); 
IF v_row_count <> 1 THEN 
-- Your code here 
END IF; 
END; 
相關問題