1

我在 mySQL 中有一个表,我在其中记录了在我的网站上完成的最后 20 个查询。我想删除第 20 行之后的行。我使用 id 但作为 Auto_Increment ..

4

3 回答 3

3

尝试这样的事情:

delete from <table> where id not in
(select id from <table> order by <datecol> desc limit 20)
于 2012-08-17T11:07:27.027 回答
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 clause而且This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

编辑

@gaurav.mishra280295 - 你添加Order By id. 即使 id 是自动增量 PK,至少也不能 100% 保证它也是插入顺序。有些延迟是可能的,它不是 100% 可靠的。

仅作为信息。

于 2012-08-17T11:27:44.940 回答
0

由于 id 是单调的并且每次增加一个,为什么不创建另外两个表。一个存储最旧的 id。另一个存储 id 的数量。然后使用这两个表,您可以确定何时开始删除行以及删除哪一个。删除时只需增加表中的 id 以记录下一个要删除的内容。

I would recommend doing this in a stored procedure.

于 2012-08-17T11:45:33.947 回答