Подтвердить что ты не робот

MySQL LIMIT для оператора DELETE

Я собрал тестовую таблицу для ошибки, с которой я недавно столкнулся. Это связано с использованием 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. Смотри ниже: DELETE FROM test WHERE name = 'foo' LIMIT 1

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

DELETE FROM test WHERE 1= 1 LIMIT 10 

Ответ 3

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

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

Ответ 4

Используйте 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