Поиск

Синтаксис Handler

HANDLER имя_таблицыOPEN [ AS псевдоним ]
HANDLER имя_таблицы READ имя_индекса{ = I >= I <= I < }
(значение!,значение2r ...)
[ WHERE условие_к1\еге ) [LIMIT ... ] HANDLER имя_таблицы READ имя_индекса { FIRST | NEXT | PREV | LAST }
( WHERE условие_ъЬеге ] [LIMIT ... ] HANDLER имя_таблицы READ { FIRST | NEXT }
t WHERE условме_мЪеге] [LIMIT ... ] HANDLER имя_таблицы CLOSE
Оператор HANDLER предоставляет прямой доступ к интерфейсам механизма хранения таблиц. Он доступен для таблиц MyISAM, начиная с версии MySQL 4.0.0, и для таблиц innoDB, начиная с версии MySQL 4.O.3.
Оператор HANDLER.. .OPEN открывает таблицу, делая ее доступной для последующих операторов HANDLER.. .read. Этот табличный объект не разделяется другими потоками сервера и не закрывается до тех пор, пока не будет вызван HANDLER.. .CLOSE, либо не будет прервано выполнение потока. Если вы открываете таблицу, используя псевдоним, последующие обращения к ней оператором handler также должны использовать псев­доним вместо реального имени таблицы.
Первый синтаксис HANDLER.. .READ извлекает строку, в которой указанный индекс удовлетворяет заданным значениям и выполняется условие WHERE. Если у вас есть ин­декс с составным ключом, указывайте значения индексных столбцов в виде списка с разделителями-запятыми. Можно указывать либо все столбцы индекса, либо левый (на­чальный) префикс списка индексных столбцов. Предположим, что индекс включает три столбца с именами col_a, col_b и col_c, причем именно в таком порядке. В операторе handler можно специфицировать значения для трех столбцов индекса либо для их лево­го подмножества, например:
HANDLER ... имяиндекса = {значение_со1_а,значение_col_b,значение_col__c) ...
HANDLER ... имяиндекса = {значение_col_a,значение_col_b) ...
HANDLER ... имя_ = {значение_со!_а) ...
Второй синтаксис HANDLER.. .READ извлекает строку из таблицы, удовлетворяющую условию WHERE, в порядке, заданном индексом.
Третий синтаксис HANDLER.. .READ извлекает строку из таблицы, удовлетворяющую условию WHERE, в натуральном порядке. Натуральный порядок - это тот порядок, в кото­ром строки хранятся в файле табличных данных MyISAM. Эти операторы также работают и с таблицами InnoDB, но там нет такой концепции, поскольку нет отдельного файла данных таблицы.

Без конструкции LIMIT все формы оператора HANDLER ... READ извлекают одну стро­ку, если она доступна. Чтобы вернуть определенное число строк, включите конструкцию LIMIT. Она имеет тот же синтаксис, что и в операторе SELECT. См. раздел Синтаксис SELECT
HANDLER.. .CLOSE закрывает таблицу, которая была открыта HANDLER.. .OPEN.
На заметку!
Чтобы использовать интерфейс HANDLER для обращения к первичному ключу (PRIMARY KEY) таблицы, указывайте идентификатор ч PRIMARY N в кавычках:
HANDLER имя_таблицыREAD v PRIMARY4 > (...);
В определенном смысле HANDLER является оператором низкого уровня. Например, он не обеспечивает целостности. То есть, HANDLER.. .OPEN не делает снимка таблицы и не блокирует таблицу. Это означает, что после того, как этот оператор отправлен серверу, данные таблицы могут быть модифицированы (этим же или любым другим потоком) и такие модификации могут быть отражены лишь частично при сканировании с помощью HANDLER...NEXT И HANDLER...PREV.
Есть несколько причин, по которым стоит использовать интерфейс HANDLER вместо обычного оператора SELECT:

  • HANDLER быстрее, чем SELECT.

  1. Назначенный handler-объект выделяется механизму хранения при вызовеHANDLER.. .OPEN, и используется повторно при последующих вызовах HANDLER для таблицы; его не нужно повторно инициализировать каждый раз.
  2. Меньше работы по синтаксическому анализу.
  3. Никакой дополнительной нагрузки, связанной с проверкой запросов или оптимизацией.
  4. Таблицу не надо блокировать между двумя вызовами HANDLER.
  5. Интерфейс HANDLER не должен обеспечивать целостность данных (например, допускаются недействительные чтения), поэтому механизм хранения может использовать оптимизацию, которую обычно не позволяет SELECT.
  • HANDLER значительно упрощает перенос в MySQL приложений, использующих ISAM-подобный интерфейс.
HANDLER позволяет пересекать базу данных способом, который непросто (или даже невозможно) реализовать с помощью оператора SELECT. Интерфейс HANDLER - это более естественный способ доступа к данным из приложений, представляющих интерактивный пользовательский интерфейс доступа к базе данных.