2016-11-18 60 views
-1

超過X天的記錄表中​​刪除觸發器我有一個名爲global_notif其中有兩列date(DATE)和notifications(文本)表.The日期格式顯示爲YYYY-MM- DD。 現在,我想應用一個觸發器,它將刪除所有2天以前的記錄。 所以我寫了這樣的定義:如何創建包含在phpMyAdmin

DELETE FROM global_notif 
WHERE date < DATE_SUB(NOW(), INTERVAL 2 DAY); 

窗口的截圖如下:phpmyadmin trigger 點擊開始後,它表明觸發設置成功。 問題是,它根本無法工作。但是,當我單獨運行上述查詢時,查詢運行正常並刪除所需的記錄。 所以,我想知道,爲什麼這個觸發delete一個不與records.Also,如果有人能告訴我,這將在此之前DELETE觸發器甚至是我想要做的工作。 謝謝。

+0

如果似乎沒有意義的,有一個觸發器在桌子上,這本身從表中刪除(因此觸發自身刪除等)前刪除。我認爲MySQL會阻止這個(我希望如此,以避免無限循環),但我會期待一個錯誤消息 – Kickstart

+0

你能否建議我從表中自行刪除記錄的其他有效方法? –

+0

不太可能。 MySQL確實支持定時執行查詢,儘管我從未使用它們(不確定它們是否在大多數MySQL安裝中啓用)。您的觸發器只會在手動刪除記錄時觸發(即,如果記錄被刪除)。如果它是定期添加到更新的表格中的,並且您只想刪除舊記錄,那麼最好使用與插入觸發器關聯的刪除。 – Kickstart

回答

0

觸發器是使用在任何表格做,那麼你想這樣做操作任何動作。 但對於你的情況,最好使用存儲過程。

CREATE PROCEDURE `deleteNotification`(X INT) 
BEGIN 

    DELETE FROM global_notif 
    WHERE (global_notif.date < DATE_SUB(NOW(), INTERVAL X DAY)); 

END; 

請創建上面的存儲過程,然後使用下面的查詢調用此過程。

CALL deleteNotification(2); 

在上面的查詢2中沒有天。

+0

爲這樣一個瑣碎的任務做一個存儲過程是浪費時間和精力 – e4c5

+0

當我執行第二條語句,下面的錯誤出現了 '#1442 - 在存儲功能無法更新表「global_notif」 /觸發,因爲它已經被用於通過調用這個存儲函數聲明/ trigger.' –

+0

@ me.ydv.5 - 我假設你試圖從之前的刪除觸發器調用這個過程?因爲這是我期望MySQL發佈的消息。 – Kickstart