HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSEHANDLER 陳述式提供直接存取表格儲存引擎介面的方式。它適用於 InnoDB 和 MyISAM 表格。
HANDLER ... OPEN 陳述式會開啟表格,使其可透過後續的 HANDLER ... READ 陳述式存取。這個表格物件不會由其他工作階段共用,並且在工作階段呼叫 HANDLER ... CLOSE 或工作階段終止之前不會關閉。
如果您使用別名開啟表格,則後續對開啟表格的其他 HANDLER 陳述式必須使用別名,而不是表格名稱。如果您沒有使用別名,而是使用資料庫名稱限定的表格名稱來開啟表格,則後續的參考必須使用不帶限定詞的表格名稱。例如,對於使用 mydb.mytable 開啟的表格,後續的參考必須使用 mytable。
第一種 HANDLER ... READ 語法會擷取符合指定索引值和 WHERE 條件的資料列。如果有多欄索引,請將索引欄位值指定為逗號分隔的清單。您可以指定索引中所有欄位的值,或者指定索引欄位最左邊的前綴欄位值。假設索引 my_idx 包含三個欄位,依序命名為 col_a、col_b 和 col_c。HANDLER 陳述式可以指定索引中所有三個欄位的值,或最左邊前綴的欄位值。例如:
HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...要使用 HANDLER 介面來參考資料表的 PRIMARY KEY,請使用加引號的識別符 `PRIMARY`。
HANDLER tbl_name READ `PRIMARY` ...第二種 HANDLER ... READ 語法會從資料表中,依索引順序擷取符合 WHERE 條件的資料列。
第三種 HANDLER ... READ 語法會從資料表中,依自然資料列順序擷取符合 WHERE 條件的資料列。當需要完整資料表掃描時,它比 HANDLER 更快。自然資料列順序是資料列儲存在 tbl_name READ index_nameMyISAM 資料表資料檔案中的順序。此陳述式也適用於 InnoDB 資料表,但因為沒有單獨的資料檔案,所以沒有這種概念。
如果沒有 LIMIT 子句,所有形式的 HANDLER ... READ 都會擷取單一資料列(如果有的話)。若要傳回特定數量的資料列,請包含 LIMIT 子句。它的語法與 SELECT 陳述式相同。請參閱 第 15.2.13 節「SELECT 陳述式」。
HANDLER ... CLOSE 會關閉使用 HANDLER ... OPEN 開啟的資料表。
使用 HANDLER 介面而不是一般 SELECT 陳述式有幾個原因:
HANDLER 是一個稍微低階的陳述式。例如,它不提供一致性。也就是說,HANDLER ... OPEN 不會 取得資料表的快照,且 不會 鎖定資料表。這表示在發出 HANDLER ... OPEN 陳述式後,可以修改資料表資料(由目前的工作階段或其他工作階段),並且這些修改可能僅部分可見於 HANDLER ... NEXT 或 HANDLER ... PREV 掃描。
開啟的處理器可以關閉並標記為重新開啟,在這種情況下,處理器會遺失其在資料表中的位置。當下列兩種情況都成立時,就會發生這種情況:
任何工作階段對處理器的資料表執行
FLUSH TABLES或 DDL 陳述式。開啟處理器的工作階段執行使用資料表的非
HANDLER陳述式。
資料表的 TRUNCATE TABLE 會關閉所有使用 HANDLER OPEN 開啟的資料表處理器。
如果資料表使用 FLUSH TABLES 清除,並且已使用 tbl_name WITH READ LOCKHANDLER 開啟,則該處理器會被隱含地清除並遺失其位置。