1
我有一個郵件隊列表和一個電子郵件黑名單表。插入到郵件隊列表中的數據是通過代碼遍歷的(字面意思是我算)。我的任務是阻止電子郵件給黑名單上的人。如果地址在黑名單表中,我可以在郵件隊列表上拒絕插入嗎?可以使用mysql觸發器來阻止插入嗎?
是否有更好的方法呢?
我有一個郵件隊列表和一個電子郵件黑名單表。插入到郵件隊列表中的數據是通過代碼遍歷的(字面意思是我算)。我的任務是阻止電子郵件給黑名單上的人。如果地址在黑名單表中,我可以在郵件隊列表上拒絕插入嗎?可以使用mysql觸發器來阻止插入嗎?
是否有更好的方法呢?
從書 '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;
[觸發引起的INSERT失敗的可能重複?可能?](http://stackoverflow.com/questions/229765/triggers-that-cause-inserts-to-fail-possible) – 2011-02-14 18:35:41
檢查上面的'可能dupe'評論中的鏈接。它正是你所需要的 - 一個「在插入之前」的數據庫,導致插入失敗。 – 2011-02-14 18:36:49