Проблема в том, что LIMIT должен использоваться только с инструкциями SELECT, так как он ограничивает количество строк, возвращаемых запросом.
Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператором SELECT.LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательными целочисленными константами, за следующими исключениями:
Within prepared statements, LIMIT parameters can be specified using ? placeholder markers.
Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.
С двумя аргументами первый аргумент задает смещение первой строки для возврата, а второй указываетмаксимальное количество строк для возврата.Смещение начальной строки 0 (не 1):
SELECT * FROM tbl LIMIT 5,10;# Получить строки 6-15
Чтобы извлечь все строки с определенного смещения до конца набора результатов, вы можете использовать некоторое большое число для второго параметра.Этот оператор извлекает все строки из 96-й строки до последней:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
С одним аргументом значение указывает количество строк, возвращаемых из началаиз набора результатов:
SELECT * FROM tbl LIMIT 5;# Получить первые 5 строк
Другими словами, LIMIT row_count эквивалентно LIMIT 0, row_count.
Для подготовленных операторов вы можете использовать заполнители.Следующие операторы вернут одну строку из таблицы tbl:
SET @ a = 1;ПОДГОТОВИТЬ STMT ОТ 'ВЫБРАТЬ * ОТ ТАБЛИЦЫ LIMIT?';EXECUTE STMT USING @a;
Следующие операторы будут возвращать строки со второй по шестую из таблицы tbl:
SET @ skip = 1;SET @ numrows = 5;ПОДГОТОВИТЬ STMT ОТ 'ВЫБРАТЬ * ИЗ ТАБЛИЦЫ LIMIT?,?';EXECUTE STMT USING @skip, @numrows;
Для совместимости с PostgreSQL MySQL также поддерживает синтаксис смещения LIMIT row_count OFFSET.
Если LIMIT встречается в подзапросе и также применяется во внешнем запросекрайний предел имеет приоритет.Например, следующий оператор создает две строки, а не одну:
(SELECT ... LIMIT 1) LIMIT 2;