DELETE FROM table_name ORDER BY id ASC LIMIT (SELECT COUNT(*) - 3000 FROM table_name);
时间: 2024-03-14 20:47:46 浏览: 99
非常抱歉,我之前的回答还是有误。正确的 SQL 语句应该是:
```
DELETE FROM table_name
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM table_name
ORDER BY id DESC
LIMIT 3000
) t
);
```
这条语句将删除除最新的 3000 行数据之外的所有数据。它使用子查询 `(SELECT id FROM table_name ORDER BY id DESC LIMIT 3000)` 获取最新的 3000 行数据的 id,然后在主查询中使用 `NOT IN` 子句将这些 id 排除在外,从而实现动态的删除操作。请注意,执行此操作需要谨慎,因为它会永久删除数据,无法撤销。
相关问题
DELETE FROM table_name ORDER BY id ASC LIMIT total_rows - 3000;语法错误
非常抱歉,我的回答还是有误。正确的 SQL 语句应该是:
```
DELETE FROM table_name
ORDER BY id ASC
LIMIT (SELECT COUNT(*) - 3000 FROM table_name);
```
这条语句将按照 id 字段升序排列,然后删除除最新的 3000 行数据之外的所有数据。其中,子查询 `(SELECT COUNT(*) - 3000 FROM table_name)` 会计算出需要删除的行数,从而实现动态的删除操作。请注意,执行此操作需要谨慎,因为它会永久删除数据,无法撤销。
阅读全文
相关推荐















