2012-08-17 61 views

回答

1
DROP TEMPORARY TABLE IF EXISTS temp_ids; 
CREATE TEMPORARY TABLE temp_ids(id INT); 

INSERT INTO temp_ids (id) 
SELECT id FROM myTable ORDER BY id DESC LIMIT 20; 

DELETE FROM myTable 
WHERE 
    id NOT IN (SELECT id FROM temp_ids); 

TEMPORARY TABLE因爲你需要避免Error Code: 1093. You can't specify target table 'myTable' for update in FROM clauseThis version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

編輯

@ gaurav.mishra280295 - 您添加了Order By id。即使id是一個自動增量PK,也至少不能100%保證它也是插入順序。有些延遲是可能的,它不是100%可靠的。

只是作爲信息。

3

嘗試這樣的事:

delete from <table> where id not in 
(select id from <table> order by <datecol> desc limit 20) 
0

由於IDS是單調的,並通過每次一個,爲什麼不創建其他兩個表增加。一個存儲最舊的ID。另一個存儲ID的數量。然後使用這兩個表,您可以計算出何時開始刪除行以及要刪除哪些行。刪除時只需增加表中的id以記錄下一個要刪除的內容。

我會建議在存儲過程中這樣做。