2013-01-11 19 views
2

可能重複:
How can I set a maximum number of rows in MySQL table?限制MySQL表爲sertain尺寸並自動刪除最早的記錄

是否有可能(以及如何)把限制在一個MySQL表(讓我們說100'000)並刪除舊的條目時,限制達到?

意思是,當我有100'000個條目並且100'001出現時,具有最小ID的條目被刪除,並且新條目被創建(具有新的ID當然)。

我希望MySQL自己處理這個問題,所以沒有外部腳本需要干涉。

我需要這個用於記錄的目的,也就是說,我想只保留一段時間的日誌,比如說一個星期。也許MySQL有可能刪除那些大於1周的條目呢?

+0

mysql可以自行安排事情,或者您可以使用cron作業來爲您做。您也可以使用觸發器來攔截插入並在當時開始清理。 –

+3

您可以使用觸發器或設置作業。相關主題:[如何在MySQL表中設置最大行數](http://stackoverflow.com/questions/8048001/how-can-i-set-a-maximum-number-of-rows-in- MySQL的表),[滾動基礎上從MySQL刪除舊行的最佳方法是什麼](http://stackoverflow.com/questions/9472167/what-is-the-best-way-to-delete-old -row-from-mysql-on-rolling-basis) – Kermit

+0

+1 @njk - 這是最好的處理方法。 – philwinkle

回答

1

我建議觸發器。這是確保在每次插入時都考慮到最大表格大小的最佳方式。

可能重複的How can I set a maximum number of rows in MySQL table?

從該接受的答案:


爭取在添加新記錄到表的限制。在添加新記錄時引發錯誤。

DELIMITER $$ 

CREATE TRIGGER trigger1 
BEFORE INSERT 
ON table1 
FOR EACH ROW 
BEGIN 
    SELECT COUNT(*) INTO @cnt FROM table1; 
    IF @cnt >= 25 THEN 
    CALL sth(); -- raise an error 
    END IF; 
END 
$$ 

DELIMITER ; 

請注意,COUNT操作在大型InnoDb表上可能會很慢。

在MySQL 5.5上,您可以使用SIGNAL語句來引發錯誤。

+0

我試着將'CALL sth();'改成''從id ASC LIMIT 1'刪除一個ORDER,但是它會給出錯誤。可以這樣做嗎? – Peon