文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  HANDLER 陳述式

15.2.5 HANDLER 陳述式

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 CLOSE

HANDLER 陳述式提供直接存取表格儲存引擎介面的方式。它適用於 InnoDBMyISAM 表格。

HANDLER ... OPEN 陳述式會開啟表格,使其可透過後續的 HANDLER ... READ 陳述式存取。這個表格物件不會由其他工作階段共用,並且在工作階段呼叫 HANDLER ... CLOSE 或工作階段終止之前不會關閉。

如果您使用別名開啟表格,則後續對開啟表格的其他 HANDLER 陳述式必須使用別名,而不是表格名稱。如果您沒有使用別名,而是使用資料庫名稱限定的表格名稱來開啟表格,則後續的參考必須使用不帶限定詞的表格名稱。例如,對於使用 mydb.mytable 開啟的表格,後續的參考必須使用 mytable

第一種 HANDLER ... READ 語法會擷取符合指定索引值和 WHERE 條件的資料列。如果有多欄索引,請將索引欄位值指定為逗號分隔的清單。您可以指定索引中所有欄位的值,或者指定索引欄位最左邊的前綴欄位值。假設索引 my_idx 包含三個欄位,依序命名為 col_acol_bcol_cHANDLER 陳述式可以指定索引中所有三個欄位的值,或最左邊前綴的欄位值。例如:

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_name 更快。自然資料列順序是資料列儲存在 MyISAM 資料表資料檔案中的順序。此陳述式也適用於 InnoDB 資料表,但因為沒有單獨的資料檔案,所以沒有這種概念。

如果沒有 LIMIT 子句,所有形式的 HANDLER ... READ 都會擷取單一資料列(如果有的話)。若要傳回特定數量的資料列,請包含 LIMIT 子句。它的語法與 SELECT 陳述式相同。請參閱 第 15.2.13 節「SELECT 陳述式」

HANDLER ... CLOSE 會關閉使用 HANDLER ... OPEN 開啟的資料表。

使用 HANDLER 介面而不是一般 SELECT 陳述式有幾個原因:

  • HANDLERSELECT 快。

    • HANDLER ... OPEN 分配指定的儲存引擎處理器物件。該物件會重複用於該資料表的後續 HANDLER 陳述式;無需為每個陳述式重新初始化。

    • 涉及的解析較少。

    • 沒有最佳化工具或查詢檢查的額外負擔。

    • 處理器介面不必提供一致的資料外觀(例如,允許髒讀取),因此儲存引擎可以使用 SELECT 通常不允許的最佳化。

  • HANDLER 使移植到使用低階 ISAM 類介面的 MySQL 應用程式更加容易。

  • HANDLER 使您能夠以難以(甚至不可能)使用 SELECT 完成的方式來遍歷資料庫。HANDLER 介面是在使用提供與資料庫互動式使用者介面的應用程式時,查看資料的更自然方式。

HANDLER 是一個稍微低階的陳述式。例如,它不提供一致性。也就是說,HANDLER ... OPEN 不會 取得資料表的快照,且 不會 鎖定資料表。這表示在發出 HANDLER ... OPEN 陳述式後,可以修改資料表資料(由目前的工作階段或其他工作階段),並且這些修改可能僅部分可見於 HANDLER ... NEXTHANDLER ... PREV 掃描。

開啟的處理器可以關閉並標記為重新開啟,在這種情況下,處理器會遺失其在資料表中的位置。當下列兩種情況都成立時,就會發生這種情況:

  • 任何工作階段對處理器的資料表執行 FLUSH TABLES 或 DDL 陳述式。

  • 開啟處理器的工作階段執行使用資料表的非 HANDLER 陳述式。

資料表的 TRUNCATE TABLE 會關閉所有使用 HANDLER OPEN 開啟的資料表處理器。

如果資料表使用 FLUSH TABLES tbl_name WITH READ LOCK 清除,並且已使用 HANDLER 開啟,則該處理器會被隱含地清除並遺失其位置。