Mysql 在SQL数据库中只保留前50条记录,并删除其余记录
我有一个分数表,它由两个字段组成:name和highscore。大概是这样的:Mysql 在SQL数据库中只保留前50条记录,并删除其余记录,mysql,sql-delete,Mysql,Sql Delete,我有一个分数表,它由两个字段组成:name和highscore。大概是这样的: ----------------------- | name | score | ----------------------- | John | 2450 | ----------------------- | Alice | 2420 | ----------------------- ... etc 我需要
-----------------------
| name | score |
-----------------------
| John | 2450 |
-----------------------
| Alice | 2420 |
-----------------------
... etc
我需要删除所有行,直到前50个分数
是否可以不创建另一个临时表?创建自动递增字段
alter table scores add id int unique auto_increment not null;
这将按照select查询的顺序自动对行进行编号,而不带条件或按顺序
select * scores;
delete from scores where id > 50;
最后,删除该字段
alter table scores drop id;
请试试这个
delete from scores_tbl Where
id not in
(select * from
(select id from scores_tbl order by score desc limit 50)
as temp)
为此需要一个唯一的字段,因此在删除之前和之后都可以更改表 比如: 更改表格分数添加id int唯一自动增量不为空强> 从id>50的分数中删除强>
更改表删除列id在所有行中循环删除最低分数,直到剩下50分。这将为数据库提供ID,但与高分不对应。id=1的行是第一个插入的行,而不是分数最高的行。我添加了id,就像@ling.s建议的那样,在您的代码中,它完全按照我想要的方式工作。谢谢最后一行:mysql不允许在内部查询中使用目标表名(执行时出错)