Spec-Zone .ru
спецификации, руководства, описания, API

E.3. Ограничения на Серверные Курсоры

Серверные курсоры реализуются в API C, используя mysql_stmt_attr_set() функция. Та же самая реализация используется для курсоров в сохраненных подпрограммах. Серверный курсор позволяет набору результатов быть сгенерированным на стороне сервера, но не переданным клиенту за исключением тех строк, которые запрашивает клиент. Например, если клиент выполняет запрос, но только интересуется первой строкой, остающиеся строки не передаются.

В MySQL серверный курсор осуществляется во внутреннюю временную таблицу. Первоначально, это - a MEMORY таблица, но преобразовывается в a MyISAM таблица, когда ее размер превышает минимальное значение max_heap_table_size и tmp_table_size системные переменные. Отметьте, что те же самые ограничения применяются к внутренним временным таблицам, создаваемым, чтобы содержать набор результатов для курсора что касается другого использования внутренних временных таблиц. См. Раздел 8.4.3.3, "Использование MySQL How Внутренние Временные таблицы". Одно ограничение реализации - то, что для большого набора результатов, получая его строки через курсор могло бы быть медленным.

Курсоры только для чтения; невозможно использовать курсор, чтобы обновить строки.

UPDATE WHERE CURRENT OF и DELETE WHERE CURRENT OF не реализуются, потому что обновляемые курсоры не поддерживаются.

Курсоры являются nonholdable (не сохраненный открытым после фиксации).

Курсоры являются asensitive.

Курсоры без возможности прокрутки.

Курсоры не называют. Обработчик оператора действует как ID курсора.

Вы можете иметь открытый только единственный курсор на готовый оператор. Если Вы нуждаетесь в нескольких курсорах, следует подготовить несколько операторов.

Невозможно использовать курсор для оператора, который генерирует набор результатов, если оператор не поддерживается в готовом режиме. Это включает операторы такой как CHECK TABLE, HANDLER READ, и SHOW BINLOG EVENTS.