Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL数据库中只保留前50条记录,并删除其余记录_Mysql_Sql Delete - Fatal编程技术网

Mysql 在SQL数据库中只保留前50条记录,并删除其余记录

Mysql 在SQL数据库中只保留前50条记录,并删除其余记录,mysql,sql-delete,Mysql,Sql Delete,我有一个分数表,它由两个字段组成:name和highscore。大概是这样的: ----------------------- | name | score | ----------------------- | John | 2450 | ----------------------- | Alice | 2420 | ----------------------- ... etc 我需要

我有一个分数表,它由两个字段组成:name和highscore。大概是这样的:

----------------------- 
| 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不允许在内部查询中使用目标表名(执行时出错)