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.
- Назначенный handler-объект выделяется механизму хранения при вызовеHANDLER.. .OPEN, и используется повторно при последующих вызовах HANDLER для таблицы; его не нужно повторно инициализировать каждый раз.
- Меньше работы по синтаксическому анализу.
- Никакой дополнительной нагрузки, связанной с проверкой запросов или оптимизацией.
- Таблицу не надо блокировать между двумя вызовами HANDLER.
- Интерфейс HANDLER не должен обеспечивать целостность данных (например, допускаются недействительные чтения), поэтому механизм хранения может использовать оптимизацию, которую обычно не позволяет SELECT.
- HANDLER значительно упрощает перенос в MySQL приложений, использующих ISAM-подобный интерфейс.
HANDLER позволяет пересекать базу данных способом, который непросто (или даже невозможно) реализовать с помощью оператора SELECT. Интерфейс HANDLER – это более естественный способ доступа к данным из приложений, представляющих интерактивный пользовательский интерфейс доступа к базе данных.