DELETE语句中的MySQL LIMIT

问题描述 投票:49回答:6

我为最近遇到的错误整理了一个测试表。它涉及在尝试从MySQL表中删除单个记录时使用LIMIT。

我说的错误是“你的SQL语法有错误;检查与你的MySQL服务器版本相对应的手册,以便在第1行的'LIMIT 1'附近使用正确的语法”

我放在一起的表叫做测试;它有3列,id,name和created。我用几个记录填充了表,然后尝试删除一个。以下是我过去尝试完成此操作的声明。

DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1

如果不使用LIMIT 1,语句执行得很好,但是如果不需要它,我当然不会使用LIMIT。

我完全知道我可以使用另一个语句来成功完成此DELETE。见下文:DELETE FROM test WHERE name = 'foo' LIMIT 1

但是我的问题集中在为什么第一个声明不适用于LIMIT。

所以我的问题是,对于生成此错误的第一个语句,我做错了什么?

mysql limit sql-delete
6个回答
21
投票

删除查询仅允许在DELETE'命令'之后的修饰符告诉数据库处理事情的方式/方式。

this page


31
投票

简单地用

DELETE FROM test WHERE 1= 1 LIMIT 10 

6
投票
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1

@Andre如果我明白你在问什么,我认为唯一缺少的是q。*之前的FROM


1
投票

使用row_count - your_desired_offset

所以,如果我们有10行,并希望抵消3

 10 - 3 = 7

现在查询delete from table where this = that order asc limit 7保持最后3,order desc保持前3:

$row_count - $offset = $limit

Delete from table where entry = criteria order by ts asc limit $limit

0
投票

来自the documentation

You cannot use ORDER BY or LIMIT in a multiple-table DELETE.

-1
投票

首先我用DELETE FROM ... USING ... WHERE查询,...因为我想先测试所以我尝试使用SELECT FROM ... USING ... WHERE ...这导致了一个错误,...然后我想减少添加的删除次数 LIMIT 10也产生了错误然后我删除了“LIMIT”并且 - hurray - 它工作:“1867行被删除。(查询耗时1.3025秒。)”

查询是:

DELETE FROM tableX 
USING tableX , tableX as Dup 
WHERE NOT tableX .id = Dup.id 
 AND tableX .id > Dup.id 
 AND tableX .email= Dup.email 
 AND tableX .mobil = Dup.mobil

这很有效。

© www.soinside.com 2019 - 2024. All rights reserved.