我在 mySQL 中有一个表,我在其中记录了在我的网站上完成的最后 20 个查询。我想删除第 20 行之后的行。我使用 id 但作为 Auto_Increment ..
问问题
1604 次
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 回答