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

如何在MySQL上一次删除一系列记录?,mysql,sql,Mysql,Sql,我的桌子上有超过60000行。如何一次删除40000到50000行?您可以使用介于之间的功能: delete from exampleTable where id between 40000 and 50000 或: delete from exampleTable,其中id>=40000且id我假设您希望根据表的默认顺序执行此操作,并且您没有自然键或其他方式在表数据中对其进行排序 例如,SELECT*FROM WORDS返回: Hi Hello Bye Goodbye What's up

我的桌子上有超过60000行。如何一次删除40000到50000行?

您可以使用
介于
之间的功能:

delete from exampleTable where id between 40000 and 50000
或:


delete from exampleTable,其中id>=40000且id我假设您希望根据表的默认顺序执行此操作,并且您没有自然键或其他方式在表数据中对其进行排序

例如,
SELECT*FROM WORDS
返回:

Hi
Hello
Bye
Goodbye
What's up
所以,如果您说要删除第2到第4行,是否要删除Hello、Bye和再见。对吧?

您的桌子的退货顺序是确定的吗?换句话说,你每次都能以相同的顺序得到结果吗?理想情况下,您将能够在表中标识一列,其中包含可以键入的数据,这将允许您使用Tricker的答案

如果这不是真的,那么您将需要在BEVERY语句中使用行号。我不是mysql用户,如果我是,下面的代码无疑会更干净。此外,我甚至没有mysql数据库来测试查询。我用这篇文章编写了一条sql语句,作为如何在mysql中获取行数的参考

我的查询假设您的表上有某种主键。如果没有,就无法保证不会删除无关的行,而且这是一种很好的表设计

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);

如果您没有主键并希望按行数(即行范围)删除, 可以通过mysql导出导入来完成。 执行自定义导出-指定起始行和计数。 在本例中,您需要两个导出:一个用于0-40k行,第二个用于最后50行。 然后将这两个文件导入表中。
注意:如果导入大文件有问题,我建议使用BigDump

表格:杂货店

id  item  
----------            
1   rice
2   soap
3   rice
4   rice
从“杂货店”中删除,其中item=“rice”限制2

这比所有其他想法都容易。对于此特定项目,有2条记录可以删除

答案是,

2行被删除。

从杂货店选择*


行是否有自动递增键?是否有顺序ID?这张桌子的结构是什么?你试过什么?为什么不能使用一个带范围的简单DELETE?下面是
DELETE
命令()的语法,例如:DELETE FROM mytable WHERE colname='XXX';虽然从技术上讲,您可以使用
限制
此示例并不充分,但没有订单的限制可能会导致意外结果。3年前提供的可接受答案更适合OPs需求,这个例子根本没有反映OPs的问题。
id  item  
----------            
1   rice
2   soap
3   rice
4   rice
id  item    
----------         
1   rice
2   soap