如何在MySQL上一次删除一系列记录?

时间:2011-11-01 20:24:34

标签: mysql sql

我桌上的行数超过60000。如何一次删除40000到50000之间的行?

4 个答案:

答案 0 :(得分:78)

您可以使用between功能:

delete from exampleTable where id between 40000 and 50000

或:

delete from exampleTable where id >= 40000 and id <= 50000

很简单?

答案 1 :(得分:3)

我假设您要根据表的默认顺序执行此操作,并且您没有自然键或其他方式在表数据中对这些顺序进行排序。

即。 SELECT * FROM WORDS返回:

Hi
Hello
Bye
Goodbye
What's up

因此,如果您说要删除第2行到第4行,是否要删除Hello,Bye和Goodbye。对?

表格的退货顺序是否确定?换句话说,每次都以相同的顺序得到结果?理想情况下,您可以在表格中标识一个包含您可以键入的数据的列,这样您就可以使用Tricker的答案。

如果不是这样,则需要使用between语句的行号。我不是一个mysql用户,如果我的话,下面的代码无疑会更清晰。另外,我甚至没有mysql数据库来测试查询。我使用这篇文章将sql语句放在一起,作为如何在mysql中获取行数的参考。 With MySQL, how can I generate a column containing the record index in a table?

我的查询假设您的桌面上有某种主键。如果没有,没有办法保证你不会删除无关的行,加上它的表设计很好。

DELETE FROM YOUR_TABLE 
WHERE primarykey = 
(SELECT  primarykey FROM 
   (SELECT t.primarykey, 
           @curRow := @curRow + 1 AS row_number
   FROM    YOUR_TABLE t
   JOIN    (SELECT @curRow := 0) r) 
WHERE row_number between 40000 and 50000);

答案 2 :(得分:0)

如果您没有主键并想按行数删除,即行范围, 它可以通过mysql导出导入完成。 执行自定义导出 - 指定起始行和计数。 在您的情况下,您将需要两个导出:一个用于行0 - 40k,第二个用于50个最后一个。 然后将这两个文件导入表中。 注意:如果导入大文件有问题,我建议使用BigDump。 http://www.ozerov.de/bigdump/

答案 3 :(得分:0)

表:杂货店

id item

1米 2肥皂 3米饭 4米饭

删除'杂货'WHERE item =“rice”LIMIT 2;

这比所有想法都安静得多。对于此特定项目,可以删除2条记录。

答案是,

删除了2行。

SELECT * FROM杂货店;

id item

1米 2肥皂