MySQL LIMIT для оператора DELETE - PullRequest
49 голосов
/ 24 мая 2011

Я собрал тестовую таблицу для ошибки, с которой я недавно столкнулся. Он предполагает использование LIMIT при попытке удалить одну запись из таблицы MySQL.

Ошибка, о которой я говорю: « У вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, рядом с« LIMIT 1 »в строке 1 »

Таблица, которую я собрал, называется test ; он имеет 3 столбца, id , имя и создан . Я заполнил таблицу несколькими записями, а затем попытался удалить одну. Ниже приведено утверждение, которое я использовал для достижения этой цели.

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

Без использования LIMIT 1 оператор выполняется просто отлично, но, конечно, я бы не использовал LIMIT, если бы в этом не было необходимости.

Я полностью осознаю, что могу использовать другое утверждение, чтобы успешно выполнить это УДАЛЕНИЕ. Увидеть ниже: DELETE FROM test WHERE name = 'foo' LIMIT 1

Однако мой вопрос связан с тем, почему первое утверждение не работает с LIMIT.

Итак, мой вопрос: что я сделал неправильно в отношении первого утверждения, чтобы сгенерировать эту ошибку?

Ответы [ 6 ]

31 голосов
/ 16 января 2014

просто используйте

DELETE FROM test WHERE 1= 1 LIMIT 10 
21 голосов
/ 24 мая 2011

запрос на удаление позволяет только модификаторам после команды DELETE сообщать базе данных, что / как нужно обрабатывать.

см. эту страницу

6 голосов
/ 20 октября 2015
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1

@ Андре. Если бы я понял, о чем вы спрашиваете, я думаю, что единственное, чего не хватает, это т. * До FROM.

1 голос
/ 05 августа 2015

Использование 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 голосов
/ 21 марта 2019

С документация :

You cannot use ORDER BY or LIMIT in a multiple-table DELETE.
0 голосов
/ 24 октября 2018

Сначала я немного постарался с запросом DELETE FROM ... USING ... WHERE, ... Так как я сначала хотел протестировать, я попытался выбрать SELECT FROM ... USING ... WHERE ... и этовызвал ошибку ... Затем я хотел уменьшить количество удалений, добавив
LIMIT 10, что также привело к ошибке. Затем я удалил "LIMIT" и - ура - это сработало: "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

Это сработало.

...