您不能以这种方式删除记录,主要问题是您不能使用子查询来指定LIMIT子句的值。
这有效(在MysqL 5.0.67中测试):
DELETE FROM `table`
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM `table`
ORDER BY id DESC
LIMIT 42 -- keep this many records
) foo
);
幸运的是,使用中间子查询使我们能够绕过这两个限制。