2012-08-17 64 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以记录下一个要删除的内容。

我会建议在存储过程中这样做。